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

  1. 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。

  1. 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 插件

  1. 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的标头携带令牌。