$ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
配置oidc
身份提供程序以使用授权码流程与 OpenID Connect 身份提供程序集成。
默认情况下,您的集群中只存在kubeadmin
用户。要指定身份提供程序,必须创建一个描述该身份提供程序的自定义资源 (CR),并将其添加到集群。
OpenShift Container Platform 用户名包含 |
OpenShift Container Platform 中的身份验证操作符要求配置的 OpenID Connect 身份提供程序实现OpenID Connect Discovery规范。
不支持 |
默认情况下,请求openid
范围。如有需要,可以在extraScopes
字段中指定额外的范围。
从 OpenID 身份提供程序返回的 JWT id_token
中读取声明,如果指定,则从UserInfo
URL 返回的 JSON 中读取声明。
必须至少配置一个声明用作用户的身份。标准身份声明是sub
。
您还可以指示哪些声明用作用户的首选用户名、显示名称和电子邮件地址。如果指定多个声明,则使用第一个具有非空值的值。下表列出了标准声明
声明 | 描述 |
---|---|
|
“主体标识符”的缩写。发行者处用户的远程身份。 |
|
配置用户时的首选用户名。用户希望被称为的简写名称,例如 |
|
电子邮件地址。 |
|
显示名称。 |
有关详细信息,请参阅OpenID 声明文档。
除非您的 OpenID Connect 身份提供程序支持资源所有者密码凭据 (ROPC) 授予流程,否则用户必须从 |
Red Hat 对 OpenShift Container Platform 中的特定 OpenID Connect (OIDC) 提供商进行了测试和支持。以下是经过测试并受 OpenShift Container Platform 支持的 OpenID Connect (OIDC) 提供商。使用不在以下列表中的 OIDC 提供商可能与 OpenShift Container Platform 一起工作,但该提供商未经 Red Hat 测试,因此不受 Red Hat 支持。
适用于 Windows Server 的 Active Directory 联合身份验证服务
目前,当使用自定义声明时,不支持在 OpenShift Container Platform 中使用适用于 Windows Server 的 Active Directory 联合身份验证服务。 |
GitLab
Keycloak
Microsoft 身份平台 (Azure Active Directory v2.0)
目前,当需要同步组名称时,不支持使用 Microsoft 身份平台。 |
Okta
Ping Identity
Red Hat Single Sign-On
身份提供商使用 OpenShift Container Platform `Secret` 对象(位于 `openshift-config` 命名空间中)来包含客户端密钥、客户端证书和密钥。
使用以下命令创建包含字符串的 `Secret` 对象
$ oc create secret generic <secret_name> --from-literal=clientSecret=<secret> -n openshift-config
或者,您可以应用以下 YAML 来创建密钥
|
您可以使用以下命令定义包含文件内容的 `Secret` 对象
$ oc create secret generic <secret_name> --from-file=<path_to_file> -n openshift-config
身份提供商使用 OpenShift Container Platform `ConfigMap` 对象(位于 `openshift-config` 命名空间中)来包含证书颁发机构捆绑包。这些主要用于包含身份提供商所需的证书捆绑包。
使用以下命令定义包含证书颁发机构的 OpenShift Container Platform `ConfigMap` 对象。证书颁发机构必须存储在 `ConfigMap` 对象的 `ca.crt` 密钥中。
$ oc create configmap ca-config-map --from-file=ca.crt=/path/to/ca -n openshift-config
或者,您可以应用以下 YAML 来创建 ConfigMap
|
以下自定义资源 (CR) 显示了 OpenID Connect 身份提供商的参数和可接受的值。
如果您必须指定自定义证书捆绑包、额外范围、额外授权请求参数或 `userInfo` URL,请使用完整的 OpenID Connect CR。
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: oidcidp (1)
mappingMethod: claim (2)
type: OpenID
openID:
clientID: ... (3)
clientSecret: (4)
name: idp-secret
claims: (5)
preferredUsername:
- preferred_username
name:
- name
email:
- email
groups:
- groups
issuer: https://www.idp-issuer.com (6)
1 | 此提供商名称作为身份声明值的词缀,用于构成身份名称。它还用于构建重定向 URL。 |
2 | 控制如何在此提供商的身份和 `User` 对象之间建立映射。 |
3 | 在 OpenID 提供商处注册的客户端的客户端 ID。客户端必须允许重定向到 `https://oauth-openshift.apps.<cluster_name>.<cluster_domain>/oauth2callback/<idp_provider_name>`。 |
4 | 包含客户端密钥的 OpenShift Container Platform `Secret` 对象的引用。 |
5 | 用作身份的声明列表。使用第一个非空声明。 |
6 | OpenID 规范中描述的颁发者标识符。必须使用 `https`,不包含查询或片段组件。 |
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: oidcidp
mappingMethod: claim
type: OpenID
openID:
clientID: ...
clientSecret:
name: idp-secret
ca: (1)
name: ca-config-map
extraScopes: (2)
- email
- profile
extraAuthorizeParameters: (3)
include_granted_scopes: "true"
claims:
preferredUsername: (4)
- preferred_username
- email
name: (5)
- nickname
- given_name
- name
email: (6)
- custom_email_claim
- email
groups: (7)
- groups
issuer: https://www.idp-issuer.com
1 | 可选:包含 PEM 编码的证书颁发机构捆绑包的 OpenShift Container Platform ConfigMap 的引用,用于验证为配置的 URL 验证服务器证书。 |
2 | 可选:除了 `openid` 范围外,在授权令牌请求期间请求的范围列表。 |
3 | 可选:添加到授权令牌请求的额外参数映射。 |
4 | 用于在为该身份预配用户时用作首选用户名的一系列声明。使用第一个非空声明。 |
5 | 用作显示名称的声明列表。使用第一个非空声明。 |
6 | 用作电子邮件地址的声明列表。使用第一个非空声明。 |
7 | 用于在用户登录时将组从 OpenID Connect 提供商同步到 OpenShift Container Platform 的声明列表。使用第一个非空声明。 |
有关所有身份提供商共有的参数(例如 `mappingMethod`)的信息,请参阅身份提供商参数。
安装集群后,向其中添加身份提供商,以便您的用户可以进行身份验证。
创建一个 OpenShift Container Platform 集群。
为您的身份提供商创建自定义资源 (CR)。
您必须以管理员身份登录。
应用已定义的 CR
$ oc apply -f </path/to/CR>
如果 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 控制台访问此页面,方法是导航到**(?)帮助** → **命令行工具** → **复制登录命令**。
登录到集群,传入令牌进行身份验证。
$ oc login --token=<token>
如果您的 OpenID Connect 身份提供商支持资源所有者密码凭据 (ROPC) 授予流程,您可以使用用户名和密码登录。您可能需要采取步骤来为您的身份提供商启用 ROPC 授予流程。 在 OpenShift Container Platform 中配置 OIDC 身份提供商后,您可以使用以下命令登录,该命令会提示您输入用户名和密码
|
确认用户已成功登录并显示用户名。
$ oc whoami