Files
higress/plugins/wasm-go/extensions/oidc/doc/Oidc.md
2023-10-31 17:15:55 +08:00

6.6 KiB
Raw Blame History

OpenID Connect

本文介绍了一个示例 OpenID Connect 插件配置,用于使用与 Okta , Auth0 , keycloak 身份提供程序对浏览器客户端进行身份验证。

OpenID Connect with Okta

配置 okta 账户

将测试 okta 应用程序与 Higress 关联

  • 创建服务来源 okta_1.png
  • 查看服务列表,有即成功 okta_2.png

将测试 okta 应用程序与您的 Oidc-Wasm 插件关联

  • 创建访问 okta 的 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

  • 配置 oidc 插件
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: "xxxx"
client_secret: "xxxxx"
service_domain: "dev-65874123.okta.com"
service_name: "okta"
service_port: 443
service_source: "dns"
timeout_millis: 2000

访问服务页面,未登陆的话进行跳转

okta_3.png

登陆成功跳转到服务页面

okta_4.png


OpenID Connect with auth0

配置 auth0 账户

将测试 auth0 应用程序与 Higress 关联

  • 创建服务来源 auth0_0.png

将测试 auth0 应用程序与您的 Oidc-Wasm 插件关联

  • 创建访问 auth0 的 ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    higress.io/destination: auth.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


  • 配置 oidc 插件
CookieName: "_oauth2_wasm_c"
client_id: "xxxxx"
client_secret: "xxxxxx"
cookie_domain: "foo.bar.com"
cookie_path: "/b"
client_url: "http://foo.bar.com/b"
service_domain: "dev-650jsqsvuyrk4ahg.us.auth0.com"
issuer: "https://dev-650jsqsvuyrk4ahg.us.auth0.com/"
redirect_url: "http://foo.bar.com/b/oauth2/callback"
scopes:
  - "openid"
  - "email"
service_name: "auth"
service_port: 443
service_source: "dns"
timeout_millis: 2000

访问服务页面,未登陆的话进行跳转

auth0_1.png

登陆成功跳转到服务页面

oath_2.png


OpenID Connect with keyclocak

配置 keyclocak 账户

  • 本文档采用 docker 本机进行部署,所以注册的 ip 应该采用 ifconfig 获取网卡 ip keycloak_0.png

  • 注册测试 web 应用程序

将测试 keyclocak 应用程序与 Higress 关联

  • 创建服务来源

keycloak_1.png

将测试 keyclocak 应用程序与您的 Oidc-Wasm 插件关联

  • 配置 oidc 插件
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: "myclinet"
client_secret: "EdKdKBX4N0jtYuPD4aGxZWiI7EVh4pr9"
service_host: "127.0.0.1:9090"
service_name: "keyclocak"
service_port: 80
service_source: "ip"

访问服务页面,未登陆的话进行跳转

keycloak_2.png

登陆成功跳转到服务页面

keycloak_3.png

与oauth2-proxy支持的服务对比

服务 是否支持
Auth0 支持
Okta 支持
dex 支持
Keycloak 支持
Gitea 支持
GitLab 支持
Google 不支持 域名不一致
GitHub 不支持 域名不一致
Microsoft Azure AD 不支持
Azure 不支持

主要的差异

主要功能差异 OAuth2-Proxy OIDC-Wasm
将服务放置在 OAuth2-Proxy 后 不具备直接验证的能力
在当前层可以展示具体信息,如 email 等 作为网关的插件,校验 token 的正确性后只是进行了转发。在实现的过程中已经捕捉到了 ID Token 信息,可以实现提取出具体的信息用于优化日志展示等。
校验一些非标准的 issuer如启动 skipIssuerCheck 的 Github 已经抽象出 OIDCHandler开启 skipIssuerChecker。只要实现 OIDCHandler 的能力,可以在 ProcessRedirect 中指定 authURL 的校验,在 ProcessExchangeToken 中指定 TokenURL 获取 token在 ProcessVerify 中校验 token