From e4a78072308de4336718e3e3a4531c09b624e0a5 Mon Sep 17 00:00:00 2001 From: Jingze <52855280+Jing-ze@users.noreply.github.com> Date: Tue, 27 Aug 2024 17:16:59 +0800 Subject: [PATCH] feat: OIDC wasm plugin (#1049) --- plugins/wasm-go/extensions/oidc/README.md | 413 ++++++++++-- plugins/wasm-go/extensions/oidc/VERSION | 1 - plugins/wasm-go/extensions/oidc/doc/Oidc.md | 199 ------ .../wasm-go/extensions/oidc/doc/auth0_0.png | Bin 25365 -> 0 bytes .../wasm-go/extensions/oidc/doc/auth0_1.png | Bin 63222 -> 0 bytes .../extensions/oidc/doc/keycloak_0.png | Bin 121093 -> 0 bytes .../extensions/oidc/doc/keycloak_1.png | Bin 58712 -> 0 bytes .../extensions/oidc/doc/keycloak_2.png | Bin 116997 -> 0 bytes .../extensions/oidc/doc/keycloak_3.png | Bin 36739 -> 0 bytes .../wasm-go/extensions/oidc/doc/oath_2.png | Bin 36720 -> 0 bytes .../wasm-go/extensions/oidc/doc/okta_1.png | Bin 112822 -> 0 bytes .../wasm-go/extensions/oidc/doc/okta_2.png | Bin 126722 -> 0 bytes .../wasm-go/extensions/oidc/doc/okta_3.png | Bin 61518 -> 0 bytes .../wasm-go/extensions/oidc/doc/okta_4.png | Bin 36951 -> 0 bytes plugins/wasm-go/extensions/oidc/go.mod | 30 +- plugins/wasm-go/extensions/oidc/go.sum | 92 ++- plugins/wasm-go/extensions/oidc/main.go | 296 +++------ plugins/wasm-go/extensions/oidc/oc/config.go | 116 ---- plugins/wasm-go/extensions/oidc/oc/cookie.go | 188 ------ .../wasm-go/extensions/oidc/oc/encryption.go | 76 --- .../wasm-go/extensions/oidc/oc/exchange.go | 256 ------- plugins/wasm-go/extensions/oidc/oc/jwks.go | 628 ------------------ .../wasm-go/extensions/oidc/oc/provider.go | 290 -------- plugins/wasm-go/extensions/oidc/oc/util.go | 112 ---- plugins/wasm-go/extensions/oidc/oc/verifer.go | 219 ------ 25 files changed, 488 insertions(+), 2428 deletions(-) delete mode 100644 plugins/wasm-go/extensions/oidc/VERSION delete mode 100644 plugins/wasm-go/extensions/oidc/doc/Oidc.md delete mode 100644 plugins/wasm-go/extensions/oidc/doc/auth0_0.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/auth0_1.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/keycloak_0.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/keycloak_1.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/keycloak_2.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/keycloak_3.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/oath_2.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/okta_1.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/okta_2.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/okta_3.png delete mode 100644 plugins/wasm-go/extensions/oidc/doc/okta_4.png delete mode 100644 plugins/wasm-go/extensions/oidc/oc/config.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/cookie.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/encryption.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/exchange.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/jwks.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/provider.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/util.go delete mode 100644 plugins/wasm-go/extensions/oidc/oc/verifer.go diff --git a/plugins/wasm-go/extensions/oidc/README.md b/plugins/wasm-go/extensions/oidc/README.md index 0eccaa866..d967b2997 100644 --- a/plugins/wasm-go/extensions/oidc/README.md +++ b/plugins/wasm-go/extensions/oidc/README.md @@ -1,58 +1,222 @@ -# 功能说明 -`oidc` 本插件实现了 OIDC 认证能力, 插件目前存在的 CSRF 攻击问题,不建议用于生产环境 +# OIDC Wasm 插件 -# 配置字段 -| 字段 | 数据类型 | 填写要求 | 默认值 | 描述 | -|-------------------|--------|------|------------|------------------------------------------------------------------| -| issuer | string | 必填 | - | 设置认证服务的 issuer ,即签发人。 | -| client_id | string | 必填 | - | 输入服务注册的应用 ID 。 | -| client_secret | string | 必填 | - | 输入服务注册的应用 Secret 。 | -| redirect_url | string | 必填 | - | 输入授权成功后的重定向地址,需要与 OIDC 中配置的重定向地址保持一致。该地址的后缀需为 (oauth2/callback)。 | -| client_url | string | 必填 | - | 登陆成功跳转后的地址,如果未跳转成功,请检查设置的 cookiename 是否重复。 | -| scopes | Array | 必填 | - | 输入授权作用域的数组。 | -| skip_expiry_check | bool | 选填 | false | 控制是否检测 IDToken 的过期状态。 | -| skip_nonce_check | bool | 选填 | true | 控制是否检测 Nonce 值。 | -| timeout_millis | int | 选填 | 500 | 设置请求与认证服务连接的超时时长。如果频繁遇到超时错误,建议增加该时长。 | -| cookie_name | string | 选填 | "_oidc_wasm" | 设置 cookie 的名称, 如果一个域名下多个路由设置不同的认证服务,建议设置不同名称。 | -| cookie_domain | string | 必填 | - | 设置 cookie 的域名。 | -| cookie_path | string | 选填 | "/" | 设置 cookie 的存储路径。 | -| cookie_secure | bool | 选填 | false | 控制 cookie 是否只在 HTTPS 下传输。 | -| cookie_httponly | bool | 选填 | true | 控制 cookie 是否仅限于 HTTP 传输,禁止JavaScript访问。 | -| cookie_samesite | string | 选填 | "Lax" | 设置 cookie 的 SameSite 属性,如:"Lax", "none"。第三方跳转一般建议默认设置为Lax | -| service_source | string | 必填 | - | 类型为固定 ip 或者 DNS ,输入认证 oidc 服务的注册来源。 | -| service_name | string | 必填 | - | 输入认证 oidc 服务的注册名称。 | -| service_port | int | 必填 | - | 输入认证 oidc 服务的服务端口。 | -| service_host | string | 必填 | - | 当类型为固定ip时必须填写,输入认证 oidc 服务的主机名。 | -| service_domain | string | 必填 | - | 当类型为DNS时必须填写,输入认证 oidc 服务的domain。 | +## 简介 -这是一个用于OIDC认证配置的表格,确保在提供所有必要的信息时遵循上述指导。 -# 配置示例 -- 固定ip -```yaml -issuer: "http://127.0.0.1:9090/realms/myrealm" -redirect_url: "http://foo.bar.com/bar/oauth2/callback" -client_url: "http://foo.bar.com/" -scopes: - - "openid" - - "email" -cookie_name: "_oauth2_wasm_keyclocak" -cookie_domain: "foo.bar.com" -client_id: "xxxxxxxxxxxx" -client_secret: "xxxxxxxxxxxxxx" -service_host: "127.0.0.1:9090" -service_name: "keyclocak" -service_port: 80 -service_source: "ip" +本仓库提供了一个高度可集成的Wasm插件支持OpenID Connect(OIDC)身份认证,同时强化了对跨站请求伪造(CSRF)攻击的防御能力,支持OpenID Connect协议中的Logout Endpoint。在通过Wasm插件OIDC验证后的请求会携带 `Authorization`的标头对应Access Token。 + +### OIDC 流程图 + +
+
+
T^*O{7v;?C4(My`mS zqL?o34<9}-Gcl#6F6Y{~Q$31faVYC+X!veVzYRkrz0QkO+&pz?*W(dq$~fYvm7r$T z%J=~a<)GwjN`;tKqq3tD6BC6NVrl`?9{O_BD@TA?{FOsBN83Jm~{(6%~HhJiyP==lj9sj@Yy{WyN<;j-%!jq9J zFNm5b!Sq$P``^D2R3*9M5){L#vLDJm{;&60gS+_Ev`BORpVv`h?k(C{#)x$GP5-|2 z)X0HCS&2eCrYgV`>+rv?lWHybHO>F^&Zt<+U<7Zfq%)0jp2(hmKj>CR6y=nN4`XZy z8?M)7kjwvdyKcc&45_K9^5)zB{Vc)cn>b}9<1Ho=>1?xKZ>A?uDTp6X5K|UcU^FrN zKmNd8OH}P<>L&a5({H346qJ?4nt1ec2dUG#|C|D8^K^+ojaa6W|MeS*`|){a2kC!* zfS`KGTqeMt=D$bKuBe;K#z&LZ&1IM`E2dO8C-V2NFEpL> 7U zi-Q7qlZK44n}5CM#y4NZ7(Tent7a5 5ag$^1TAlx~-d`VkW9(