{"error":"Error message"}
配置basic-authentication
身份提供程序,以便用户可以使用针对远程身份提供程序验证的凭据登录到 OpenShift Container Platform。基本身份验证是一种通用的后端集成机制。
默认情况下,集群中只存在kubeadmin
用户。要指定身份提供者,必须创建一个描述该身份提供者的自定义资源 (CR),并将其添加到集群。
OpenShift Container Platform 用户名中包含 |
基本身份验证是一种通用的后端集成机制,允许用户使用针对远程身份提供程序验证的凭据登录到 OpenShift Container Platform。
由于基本身份验证是通用的,因此可以将此身份提供程序用于高级身份验证配置。
基本身份验证必须使用到远程服务器的 HTTPS 连接,以防止潜在的用户名和密码窃听以及中间人攻击。 |
配置基本身份验证后,用户将其用户名和密码发送到 OpenShift Container Platform,然后通过发出服务器到服务器的请求(将凭据作为基本身份验证标头传递)来验证远程服务器上的这些凭据。这要求用户在登录期间将其凭据发送到 OpenShift Container Platform。
这仅适用于用户名/密码登录机制,并且 OpenShift Container Platform 必须能够向远程身份验证服务器发出网络请求。 |
用户名和密码针对受基本身份验证保护并返回 JSON 的远程 URL 进行验证。
401
响应表示身份验证失败。
非200
状态或存在非空的“error”键表示错误。
{"error":"Error message"}
带有sub
(主题)键的200
状态表示成功。
{"sub":"userid"} (1)
1 | 主题必须对经过身份验证的用户唯一,并且不得修改。 |
成功的响应可以选择提供其他数据,例如:
使用name
键显示名称。例如:
{"sub":"userid", "name": "User Name", ...}
使用email
键的电子邮件地址。例如:
{"sub":"userid", "email":"[email protected]", ...}
使用preferred_username
键的首选用户名。当唯一的、不可更改的主题是数据库键或 UID,并且存在更易于阅读的名称时,这很有用。这在为经过身份验证的身份配置 OpenShift Container Platform 用户时用作提示。例如:
{"sub":"014fbff9a07c", "preferred_username":"bob", ...}
身份提供者在openshift-config
命名空间中使用 OpenShift Container Platform Secret
对象来包含客户端密钥、客户端证书和密钥。
使用以下命令创建一个包含密钥和证书的Secret
对象:
$ oc create secret tls <secret_name> --key=key.pem --cert=cert.pem -n openshift-config
也可以应用以下YAML来创建密钥
|
身份提供程序使用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) 显示了基本身份验证身份提供程序的参数和可接受的值。
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: basicidp (1)
mappingMethod: claim (2)
type: BasicAuth
basicAuth:
url: https://www.example.com/remote-idp (3)
ca: (4)
name: ca-config-map
tlsClientCert: (5)
name: client-cert-secret
tlsClientKey: (6)
name: client-key-secret
1 | 此提供程序名称作为前缀添加到返回的用户ID中,以形成身份名称。 |
2 | 控制如何在此提供程序的身份和User 对象之间建立映射。 |
3 | 接受基本身份验证标头中凭据的URL。 |
4 | 可选:指向包含PEM编码证书颁发机构捆绑包的OpenShift Container Platform ConfigMap 对象的引用,用于验证为配置的URL验证服务器证书。 |
5 | 可选:指向包含客户端证书的OpenShift Container Platform Secret 对象的引用,在向配置的URL发出请求时出示该证书。 |
6 | 指向包含客户端证书密钥的OpenShift Container Platform Secret 对象的引用。如果指定了tlsClientCert ,则需要此项。 |
有关所有身份提供程序共有的参数(例如mappingMethod
)的信息,请参阅身份提供程序参数。
安装集群后,向其中添加身份提供程序,以便用户可以进行身份验证。
创建OpenShift Container Platform集群。
为您的身份提供程序创建自定义资源 (CR)。
您必须以管理员身份登录。
应用已定义的CR
$ oc apply -f </path/to/CR>
如果CR不存在, |
从您的身份提供程序以用户身份登录到集群,并在提示时输入密码。
$ oc login -u <username>
确认用户已成功登录,并显示用户名。
$ oc whoami
OpenShift Container Platform 4中的基本身份提供程序 (IDP) 配置要求IDP服务器响应JSON以表示成功和失败。您可以使用Apache HTTPD中的CGI脚本实现此目的。本节提供示例。
/etc/httpd/conf.d/login.conf
示例<VirtualHost *:443> # CGI Scripts in here DocumentRoot /var/www/cgi-bin # SSL Directives SSLEngine on SSLCipherSuite PROFILE=SYSTEM SSLProxyCipherSuite PROFILE=SYSTEM SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /etc/pki/tls/private/localhost.key # Configure HTTPD to execute scripts ScriptAlias /basic /var/www/cgi-bin # Handles a failed login attempt ErrorDocument 401 /basic/fail.cgi # Handles authentication <Location /basic/login.cgi> AuthType Basic AuthName "Please Log In" AuthBasicProvider file AuthUserFile /etc/httpd/conf/passwords Require valid-user </Location> </VirtualHost>
/var/www/cgi-bin/login.cgi
示例#!/bin/bash echo "Content-Type: application/json" echo "" echo '{"sub":"userid", "name":"'$REMOTE_USER'"}' exit 0
/var/www/cgi-bin/fail.cgi
示例#!/bin/bash echo "Content-Type: application/json" echo "" echo '{"error": "Login failure"}' exit 0
最常见的问题与后端服务器的网络连接有关。为了简单调试,请在主节点上运行curl
命令。要测试是否成功登录,请在以下示例命令中将<user>
和<password>
替换为有效的凭据。要测试无效登录,请将它们替换为无效凭据。
$ curl --cacert /path/to/ca.crt --cert /path/to/client.crt --key /path/to/client.key -u <user>:<password> -v https://www.example.com/remote-idp
成功响应
带有sub
(主题)键的200
状态表示成功。
{"sub":"userid"}
主题必须对已认证用户唯一,并且不能修改。
成功的响应可以选择提供其他数据,例如:
使用name
键显示名称
{"sub":"userid", "name": "User Name", ...}
使用email
键显示电子邮件地址
{"sub":"userid", "email":"[email protected]", ...}
使用preferred_username
键显示首选用户名
{"sub":"014fbff9a07c", "preferred_username":"bob", ...}
当唯一的、不可更改的主题是数据库密钥或UID,并且存在更易于阅读的名称时,preferred_username
键非常有用。这在为已认证身份配置OpenShift Container Platform用户时用作提示。
失败响应
401
响应表示身份验证失败。
非200
状态或存在非空的“error”键表示错误:{"error":"Error message"}