7.9. 配置 OpenID Connect 身份提供程序
				配置 oidc 身份提供程序,使用授权代码流与 OpenID Connect 身份提供程序集成。
			
7.9.1. 关于 OpenShift Container Platform 中的身份提供程序
					默认情况下,集群中只有 kubeadmin 用户。要指定身份提供程序,您必须创建一个自定义资源(CR) 来描述该身份提供程序并把它添加到集群中。
				
						OpenShift Container Platform 用户名不能包括 /、: 和 %。
					
7.9.2. 关于 OpenID Connect 身份验证
OpenShift Container Platform 中的 Authentication Operator 要求配置的 OpenID Connect 身份提供程序实现 OpenID Connect Discovery 规格。
						不支持 ID Token 和 UserInfo 解密。
					
					默认情况下,需要 openid 范围。如果必要,可在 extraScopes 字段中指定额外的范围。
				
					声明可读取自从 OpenID 身份提供程序返回的 JWT id_token;若有指定,也可读取自从 UserInfo URL 返回的 JSON。
				
					必须至少配置一个声明,以用作用户的身份。标准的身份声明是 sub。
				
您还可以指定将哪些声明用作用户的首选用户名、显示名称和电子邮件地址。如果指定了多个声明,则使用第一个带有非空值的声明。下表列出了标准声明:
| 声明 | 描述 | 
|---|---|
| 
									 | “subject identifier”的缩写。用户在签发者处的远程身份。 | 
| 
									 | 
									置备用户时的首选用户名。用户希望使用的简写名称,如  | 
| 
									 | 电子邮件地址。 | 
| 
									 | 显示名称。 | 
如需更多信息,请参阅 OpenID 声明文档。
						除非您的 OpenID Connect 身份提供程序支持资源所有者密码凭证 (ROPC) 授权流,否则用户必须从 <namespace_route>/oauth/token/request 中获取令牌,才能用于命令行工具。
					
7.9.3. 支持的 OIDC 供应商
红帽在 OpenShift Container Platform 中测试并支持特定的 OpenID Connect (OIDC) 供应商。OpenShift Container Platform 测试并支持以下 OpenID Connect (OIDC) 供应商。在 OpenShift Container Platform 中使用没有包括在以下列表中的 OIDC 供应商可能可以正常工作,但没有经过红帽测试,因此不被红帽支持。
- Active Directory Federation Services for Windows Server 注意- 目前,在使用自定义声明时,不支持将 Active Directory Federation Services for Windows Server 用于 OpenShift Container Platform。 
- GitLab
- Keycloak
- Microsoft 身份平台(Azure Active Directory v2.0) 注意- 目前,当需要同步组名称时,不支持使用 Microsoft 身份平台。 
- Okta
- Ping 身份
- 红帽单点登录
7.9.4. 创建 secret
					身份提供程序使用 openshift-config 命名空间中的 OpenShift Container Platform Secret 对象来包含客户端 secret、客户端证书和密钥。
				
流程
- 使用以下命令创建一个包含字符串的 - Secret对象:- oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config - $ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 提示- 您还可以应用以下 YAML 来创建 secret: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 您可以使用以下命令定义一个包含文件内容的 - Secret对象:- oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config - $ oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.9.5. 创建配置映射
					身份提供程序使用 openshift-config 命名空间中的 OpenShift Container Platform ConfigMap 对象来包含证书颁发机构捆绑包。主要用于包含身份提供程序所需的证书捆绑包。
				
只有 GitHub Enterprise 需要此步骤。
流程
- 使用以下命令,定义包含证书颁发机构的 OpenShift Container Platform - ConfigMap。证书颁发机构必须存储在- ConfigMap对象的- ca.crt键中。- oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config - $ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 提示- 您还可以应用以下 YAML 来创建配置映射: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.9.6. OpenID Connect CR 示例
以下自定义资源 (CR) 显示 OpenID Connect 身份提供程序的参数和可接受值。
					如果您必须指定自定义证书捆绑包、额外范围、额外授权请求参数或 userInfo URL,请使用完整的 OpenID Connect CR。
				
标准 OpenID Connect CR
- 1
- 此提供程序名称作为前缀放在身份声明值前,以此组成身份名称。它还可用来构建的重定向 URL。
- 2
- 控制如何在此提供程序的身份和User对象之间建立映射。
- 3
- 在 OpenID 提供程序中注册的客户端的客户端 ID。该客户端必须能够重定向到https://oauth-openshift.apps.<cluster_name>.<cluster_domain>/oauth2callback/<idp_provider_name>。
- 4
- 对包含客户端 secret 的 OpenShift Container PlatformSecret对象的引用。
- 5
- 用作身份的声明列表。使用第一个非空声明。
- 6
- OpenID 规范中描述的颁发者标识符。必须使用https,且不带查询或分段组件。
完整 OpenID Connect CR
- 1
- 可选:对包含 PEM 编码证书颁发机构捆绑包的 OpenShift Container Platform 配置映射的引用,以用于验证所配置 URL 的服务器证书。
- 2
- 可选:除openid范围外的可选请求范围列表,在授权令牌请求期间使用。
- 3
- 可选:映射到授权令牌请求中的附加参数映射。
- 4
- 为此身份置备用户时用作首选用户名的声明的列表。使用第一个非空声明。
- 5
- 用作显示名称的声明列表。使用第一个非空声明。
- 6
- 用作电子邮件地址的声明列表。使用第一个非空声明。
- 7
- 用户登录时,用于将 OpenID Connect 供应商的组与 OpenShift Container Platform 同步的声明列表。使用第一个非空声明。
7.9.7. 在集群中添加身份提供程序
安装集群之后,请在其中添加一个身份提供程序,以便您的用户可以进行身份验证。
先决条件
- 创建 OpenShift Container Platform 集群。
- 为身份提供程序创建自定义资源(CR)。
- 必须已经以管理员身份登录。
流程
- 应用定义的 CR: - oc apply -f </path/to/CR> - $ oc apply -f </path/to/CR>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果一个 CR 不存在, - oc apply会创建一个新的 CR,并可能会触发以下警告- Warning: oc apply should be used on resources created by either oc create --save-config or oc apply。在这种情况下,您可以忽略这个警告。
- 从 OAuth 服务器获取令牌。 - 只要 - kubeadmin用户已被删除,- oc login命令就会提供如何访问可以获得令牌的网页的说明。- 您还可以通过使用 web 控制台的 (?)访问此页面。Help - Command Line Tools - Copy Login Command. 
- 登录到集群,提供令牌进行身份验证。 - oc login --token=<token> - $ oc login --token=<token>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果您的 OpenID Connect 身份提供程序支持资源所有者密码凭证(ROPC)授权流,您可以使用用户名和密码登录。您可能需要执行相应的步骤,为身份提供程序启用 ROPC 授权流。 - 在 OpenShift Container Platform 中配置 OIDC 身份提供程序后,您可以使用以下命令登录,以提示您的用户名和密码: - oc login -u <identity_provider_username> --server=<api_server_url_and_port> - $ oc login -u <identity_provider_username> --server=<api_server_url_and_port>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 确认用户登录成功,并显示用户名。 - oc whoami - $ oc whoami- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.9.8. 使用 web 控制台配置身份提供程序
通过 web 控制台而非 CLI 配置身份提供程序 (IDP)。
先决条件
- 您必须以集群管理员身份登录到 web 控制台。
流程
- 
							导航至 Administration Cluster Settings。 
- 在 Configuration 选项卡下,单击 OAuth。
- 在 Identity Providers 部分中,从 Add 下拉菜单中选择您的身份提供程序。
您可以通过 web 控制台来指定多个 IDP,而不会覆盖现有的 IDP。