跳转到内容

OIDC 认证

功能说明

oidc 插件实现了 OIDC 认证能力, 插件目前存在的 CSRF 攻击问题,不建议用于生产环境。

配置字段

字段数据类型填写要求默认值描述
issuerstring必填-设置认证服务的 issuer ,即签发人。
client_idstring必填-输入服务注册的应用 ID 。
client_secretstring必填-输入服务注册的应用 Secret 。
redirect_urlstring必填-输入授权成功后的重定向地址,需要与 OIDC 中配置的重定向地址保持一致。该地址的后缀需为 (oauth2/callback)。
client_urlstring必填-登陆成功跳转后的地址,如果未跳转成功,请检查设置的 cookiename 是否重复。
scopesArray必填-输入授权作用域的数组。
skip_expiry_checkbool选填false控制是否检测 IDToken 的过期状态。
skip_nonce_checkbool选填true控制是否检测 Nonce 值。
timeout_millisint选填500设置请求与认证服务连接的超时时长。如果频繁遇到超时错误,建议增加该时长。
cookie_namestring选填”_oidc_wasm”设置 cookie 的名称, 如果一个域名下多个路由设置不同的认证服务,建议设置不同名称。
cookie_domainstring必填-设置 cookie 的域名。
cookie_pathstring选填”/“设置 cookie 的存储路径。
cookie_securebool选填false控制 cookie 是否只在 HTTPS 下传输。
cookie_httponlybool选填true控制 cookie 是否仅限于 HTTP 传输,禁止JavaScript访问。
cookie_samesitestring选填”Lax”设置 cookie 的 SameSite 属性,如:“Lax”, “none”。第三方跳转一般建议默认设置为Lax
service_sourcestring必填-类型为固定 ip 或者 DNS ,输入认证 oidc 服务的注册来源。
service_namestring必填-输入认证 oidc 服务的注册名称。
service_portint必填-输入认证 oidc 服务的服务端口。
service_hoststring必填-当类型为固定ip时必须填写,输入认证 oidc 服务的主机名。
service_domainstring必填-当类型为DNS时必须填写,输入认证 oidc 服务的domain。

这是一个用于 OIDC 认证配置的表格,确保在提供所有必要的信息时遵循上述指导。

配置示例

固定 IP

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"

DNS域名

在服务来源中注册好服务后,创建对应的 ingress。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
higress.io/destination: okta.dns
higress.io/backend-protocol: "HTTPS"
higress.io/ignore-path-case: "false"
spec:
ingressClassName: higress
rules:
- host: foo.bar.com
http:
paths:
- path: /
pathType: Prefix
backend:
resource:
apiGroup: networking.higress.io
kind: McpBridge
name: default

创建 Wasm 插件

issuer: "https://dev-65874123.okta.com"
redirect_url: "http://foo.bar.com/a/oauth2/callback"
scopes:
- "openid"
- "email"
client_url: "http://foo.bar.com/a"
cookie_domain: "foo.bar.com"
client_id: "xxxxxxxxxxxxxxx"
client_secret: "xxxxxxx"
service_domain: "dev-65874123.okta.com"
service_name: "okta"
service_port: 443
service_source: "dns"
timeout_millis: 2000

在通过插件验证后会携带 Authorization的标头携带令牌。