Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

13.3.13. OpenID 连接

identityProviders 小节中设置 OpenIDIdentityProvider,以使用授权代码流与 OpenID Connect 身份提供程序 集成

您可以将 Red Hat Single Sign-On 配置为 OpenShift Container Platform 的 OpenID Connect 身份提供程序。

注意

不支持 ID TokenUserInfo 解密。

默认情况下,需要 openid 范围。如果必要,可在 extraScopes 字段中指定额外的范围。

声明可读取自从 OpenID 身份提供程序返回的 JWT id_token;若有指定,也可读取自从 UserInfo URL 返回的 JSON。

必须至少配置一个声明,以用作用户的身份。标准的身份声明是 sub

您还可以指定将哪些声明用作用户的首选用户名、显示名称和电子邮件地址。如果指定了多个声明,则使用第一个带有非空值的声明。标准的声明是:

sub

“subject identifier”的缩写。 用户在签发者处的远程身份。

preferred_username

置备用户时的首选用户名。用户希望使用的简写名称,如 janedoe。通常,与身份验证系统中用户的登录或用户名对应的值,如用户名或电子邮件。

email

电子邮件地址。

name

显示名称。

如需更多信息,请参阅 OpenID 声明文档

注意

使用 OpenID Connect 身份提供程序要求用户使用 <master>/oauth/token/request 来获取令牌,以便用于命令行工具。

使用 OpenIDIdentityProvider的标准 master 配置

oauthConfig:
  ...
  identityProviders:
  - name: my_openid_connect 1
    challenge: true 2
    login: true 3
    mappingMethod: claim 4
    provider:
      apiVersion: v1
      kind: OpenIDIdentityProvider
      clientID: ... 5
      clientSecret: ... 6
      claims:
        id: 7
        - sub
        preferredUsername:
        - preferred_username
        name:
        - name
        email:
        - email
      urls:
        authorize: https://myidp.example.com/oauth2/authorize 8
        token: https://myidp.example.com/oauth2/token 9

1
此提供程序名称作为前缀放在身份声明值前,以此组成身份名称。它还可用来构建的重定向 URL。
2
true 时,来自非 Web 客户端(如 CLI)的未经身份验证的令牌请求会为此提供程序发送 WWW-Authenticate 质询标头。这要求 OpenID 供应商支持 Resource Owner Password Credentials 授权流。
3
当为 true 时,来自 Web 客户端(如 Web 控制台)的未经身份验证的令牌请求会重定向到要登录的授权 URL。
4
控制如何在此提供程序的身份和用户对象之间建立映射,如上 所述
5
在 OpenID 提供程序中注册的客户端的客户端 ID。该客户端必须能够重定向到 <master>/oauth2callback/<identityProviderName>
6
客户端机密。此值也可在 环境变量、外部文件或加密文件 中提供。
7
用作身份的声明的列表。使用第一个非空声明。至少需要一个声明。如果列出的声明都没有值,身份验证会失败。例如,这使用返回的 id_token 中的 sub 声明的值作为用户的身份。
8
OpenID spec 中描述的 授权端点。必须使用 https
9
OpenID spec 中描述的令牌端点。必须使用 https

也可以指定自定义证书捆绑包、额外范围、额外授权请求参数和 userInfo URL:

例 13.9. 使用 OpenIDIdentityProvider的完整 Master 配置

oauthConfig:
  ...
  identityProviders:
  - name: my_openid_connect
    challenge: false
    login: true
    mappingMethod: claim
    provider:
      apiVersion: v1
      kind: OpenIDIdentityProvider
      clientID: ...
      clientSecret: ...
      ca: my-openid-ca-bundle.crt 1
      extraScopes: 2
      - email
      - profile
      extraAuthorizeParameters: 3
        include_granted_scopes: "true"
      claims:
        id: 4
        - custom_id_claim
        - sub
        preferredUsername: 5
        - preferred_username
        - email
        name: 6
        - nickname
        - given_name
        - name
        email: 7
        - custom_email_claim
        - email
      urls:
        authorize: https://myidp.example.com/oauth2/authorize
        token: https://myidp.example.com/oauth2/token
        userInfo: https://myidp.example.com/oauth2/userinfo 8
1
用于验证所配置 URL 的服务器证书的证书捆绑包。如果为空,则使用系统可信根。
2
openid 范围外的可选请求范围列表,在授权令牌请求期间使用。
3
添加至授权令牌请求的附加参数的可选映射。
4
用作身份的声明的列表。使用第一个非空声明。至少需要一个声明。如果列出的声明都没有值,身份验证会失败。
5
为此身份置备用户时用作首选用户名的声明的列表。使用第一个非空声明。
6
用作显示名称的声明列表。使用第一个非空声明。
7
用作电子邮件地址的声明列表。使用第一个非空声明。
8
OpenID spec 中描述的 UserInfo 端点。必须使用 https