第 4 章 其他概念


4.1. 身份验证

4.1.1. 概述

身份验证层识别与 OpenShift Container Platform API 请求关联的用户。然后,授权层使用与请求用户相关的信息来确定是否应允许该请求。

作为管理员,您可以使用 主(master)配置文件 配置身份验证

4.1.2. 用户和组

OpenShift Container Platform 中的用户是可以向 OpenShift Container Platform API 发出请求的实体。通常,这代表与 OpenShift Container Platform 交互的开发人员或管理员的帐户。

用户可以分配到一个或多个中,每个组代表特定的用户集合。在 管理授权策略 时,可以同时为多个用户授予权限,例如允许访问 项目内 的对象,而不必逐一向用户授予权限。

除了显式定义的组外,还有 OpenShift 自动调配的 系统组或虚拟组。在 查看集群绑定 时可以看到它们。

在默认虚拟组集合中,特别注意以下内容:

虚拟组描述

system:authenticated

自动与所有经过身份验证的用户关联。

system:authenticated:oauth

自动与所有使用 OAuth 访问令牌经过身份验证的用户关联。

system:unauthenticated

自动与所有未经身份验证的用户关联。

4.1.3. API 身份验证

对 OpenShift Container Platform API 的请求通过以下方式进行身份验证:

OAuth 访问令牌
  • 使用 <master> /oauth/authorize 和 <master>/ oauth/token 端点从 OpenShift Container Platform OAuth 服务器获取。
  • 作为 Authorization 发送:Bearer…​ 标头发送。
  • base64url.bearer.authorization.k8s.io.<base64url-encoded-token> 形式,作为 websocket 请求的 websocket 子协议标头发送。
X.509 客户端证书
  • 需要与 API 服务器的 HTTPS 连接。
  • 由 API 服务器针对可信证书颁发机构捆绑包进行验证。
  • API 服务器创建证书并分发到控制器,以对自身进行身份验证。

任何具有无效访问令牌或无效证书的请求都会被身份验证层以 401 错误形式拒绝。

如果没有出示访问令牌或证书,身份验证层会将 system:anonymous 虚拟用户和 system:unauthenticated 虚拟组分配给请求。这使得授权层能够决定匿名用户可以发出哪些(如有)请求。

4.1.3.1. 模拟(Impersonation)

对 OpenShift Container Platform API 的请求可以包含 Impersonate-User 标头,这表示请求者希望像来自指定用户一样处理请求。您可以通过在请求中添加 --as=<user> 标志来模拟用户。

在用户 A 可以模拟用户 B 之前,用户 A 通过了身份验证。然后,进行授权检查以确保 User A 可以模仿名为 User B 的用户。如果用户 A 请求模拟服务帐户 system:serviceaccount:namespace:name,OpenShift Container Platform 会确认 User A 可以模仿名为 nameserviceaccount命名空间中。如果检查失败,请求会失败,并显示 403(Forbidden)错误代码。

默认情况下,项目管理员和编辑器可以模拟其命名空间中的服务帐户。sudoers 角色允许用户模拟 system:admin,后者具有集群管理员权限。通过模拟 system:admin,可以在用户管理集群时提供一定的拼写错误(而非安全性)的保护。例如,运行 oc delete nodes --all 会失败,但运行 oc delete nodes --all --as=system:admin 会失败。您可以运行以下命令来授予该权限的用户:

$ oc create clusterrolebinding <any_valid_name> --clusterrole=sudoer --user=<username>

如果您需要代表用户创建项目请求,请在命令中包含 --as=<user> --as-group=<group1> --as-group=<group2> 标志。因为 system:authenticated:oauth 是唯一可以创建项目请求的 bootstrap 组,所以您必须模拟该组,如下例所示:

$ oc new-project <project> --as=<user> \
--as-group=system:authenticated --as-group=system:authenticated:oauth

4.1.4. OAuth

OpenShift Container Platform master 包含内置的 OAuth 服务器。用户获取 OAuth 访问令牌来对自身进行 API 身份验证。

当用户请求新的 OAuth 令牌时,OAuth 服务器使用配置的 身份提供程序 来确定发出请求的人员的身份。

然后,它会确定该身份所映射到的用户,为该用户创建一个访问令牌,再返回要使用的令牌。

4.1.4.1. OAuth 客户端

每个对 OAuth 令牌的请求都必须指定要接收和使用令牌的 OAuth 客户端。启动 OpenShift Container Platform API 时会自动创建以下 OAuth 客户端:

OAuth 客户端使用方法

openshift-web-console

为 Web 控制台请求令牌。

openshift-browser-client

使用可处理交互式登录的用户代理,在 <master> /oauth/token/request 请求令牌。

openshift-challenging-client

使用可处理 WWW-Authenticate 质询的用户代理来请求令牌。

注册其他客户端:

$ oc create -f <(echo '
kind: OAuthClient
apiVersion: oauth.openshift.io/v1
metadata:
 name: demo 1
secret: "..." 2
redirectURIs:
 - "http://www.example.com/" 3
grantMethod: prompt 4
')
1
OAuth 客户端 的名称 用作提交对 <master> /oauth/authorize 和 <master>/ oauth/token 的请求时的 client_id 参数。
2
在提出对 <master>/oauth/token 的请求时,secret 将作为 client_secret 参数使用。
3
在对 <master>/oauth/authorize<master>/oauth/token 的请求中指定的 redirect_uri 参数必须等于 redirectURIs 中的某一 URI(或使用它作为前缀)。
4
grantMethod 用于确定当此客户端请求了令牌且还未被用户授予访问权限时应采取的操作。使用 Grant 选项中看到的相同值。

4.1.4.2. 服务帐户作为 OAuth 客户端

服务帐户可用作受约束形式的 OAuth 客户端。服务帐户只能请求范围的子集,允许访问服务帐户本身的命名空间内的一些基本用户信息和基于角色的功能:

  • user:info
  • user:check-access
  • role:<any_role>:<serviceaccount_namespace>
  • role:<any_role>:<serviceaccount_namespace>:!

在将服务帐户用作 OAuth 客户端时:

  • client_idsystem:serviceaccount:<serviceaccount_namespace>:<serviceaccount_name>
  • client_secret 可以是该服务帐户的任何 API 令牌。例如:

    $ oc sa get-token <serviceaccount_name>
  • 要获取 WWW-Authenticate 质询,请将服务帐户上的 serviceaccounts.openshift.io/oauth-want-challenges 注解设置为 true
  • redirect_uri 必须与服务帐户上的注解匹配。服务帐户的重定向 URI 作为 OAuth 客户端提供了更多信息。

4.1.4.3. 重定向作为 OAuth 客户端的服务帐户的 URI

注解键必须具有前缀 serviceaccounts.openshift.io/oauth-redirecturi.serviceaccounts.openshift.io/oauth-redirectreference.,例如:

serviceaccounts.openshift.io/oauth-redirecturi.<name>

采用最简单形式时,注解可用于直接指定有效的重定向 URI。例如:

"serviceaccounts.openshift.io/oauth-redirecturi.first":  "https://example.com"
"serviceaccounts.openshift.io/oauth-redirecturi.second": "https://other.com"

上例中的 firstsecond 后缀用于分隔两个有效的重定向 URI。

在更复杂的配置中,静态重定向 URI 可能还不够。例如,您可能希望路由的所有入口都被视为有效。这时可使用通过 serviceaccounts.openshift.io/oauth-redirectreference. 前缀的动态重定向 URI。

例如:

"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"

由于此注解的值包含序列化 JSON 数据,因此在扩展格式中可以更轻松地查看:

{
  "kind": "OAuthRedirectReference",
  "apiVersion": "v1",
  "reference": {
    "kind": "Route",
    "name": "jenkins"
  }
}

您现在可以看到,OAuthRedirectReference 允许引用名为 jenkins 的路由。因此,该路由的所有入口现在都被视为有效。OAuthRedirectReference 的完整规格是:

{
  "kind": "OAuthRedirectReference",
  "apiVersion": "v1",
  "reference": {
    "kind": ..., 1
    "name": ..., 2
    "group": ... 3
  }
}
1
kind 指的是被引用对象的类型。目前,只支持 route
2
name 指的是项目的名称。对象必须与服务帐户位于同一命名空间中。
3
group 指的是对象所属的组。此项留空,因为路由的组是空字符串。

可以合并这两个注解前缀,来覆盖引用对象提供的数据。例如:

"serviceaccounts.openshift.io/oauth-redirecturi.first":  "custompath"
"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"

first 后缀用于将注解绑在一起。假设 jenkins 路由的入口为 https://example.com,现在 https://example.com/custompath 被视为有效,但 https://example.com 视为无效。部分提供覆盖数据的格式如下:

类型语法

Scheme

"https://"

主机名

"//website.com"

端口

"//:8000"

路径

"examplepath"

注意

指定主机名覆盖将替换被引用对象的主机名数据,这不一定是需要的行为。

以上语法的任何组合都可以使用以下格式进行合并:

<scheme:>//<hostname><:port>/<path>

同一对象可以被多次引用,以获得更大的灵活性:

"serviceaccounts.openshift.io/oauth-redirecturi.first":  "custompath"
"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
"serviceaccounts.openshift.io/oauth-redirecturi.second":  "//:8000"
"serviceaccounts.openshift.io/oauth-redirectreference.second": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"

假设名为 jenkins 的路由具有入口 https://example.com,则 https://example.com:8000https://example.com/custompath 都被视为有效。

可以同时使用静态和动态注解,以实现所需的行为:

"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
"serviceaccounts.openshift.io/oauth-redirecturi.second": "https://other.com"
4.1.4.3.1. OAuth 的 API 事件

在有些情况下,API 服务器会返回一个 unexpected condition 错误消息;若不直接访问 API 主日志,很难对此消息进行调试。该错误的基本原因被有意遮挡,以避免向未经身份验证的用户提供有关服务器状态的信息。

这些错误的子集与服务帐户 OAuth 配置问题有关。这些问题在非管理员用户可查看的事件中捕获。OAuth 期间遇到 unexpected condition 服务器错误时,可运行 oc get eventsServiceAccount 下查看这些事件。

以下示例警告缺少正确 OAuth 重定向 URI 的服务帐户:

$ oc get events | grep ServiceAccount

输出示例

1m         1m          1         proxy                    ServiceAccount                                  Warning   NoSAOAuthRedirectURIs   service-account-oauth-client-getter   system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>

运行 oc describe sa/<service-account-name> 可以报告与给定服务帐户名称相关的任何 OAuth 事件。

$ oc describe sa/proxy | grep -A5 Events

输出示例

Events:
  FirstSeen     LastSeen        Count   From                                    SubObjectPath   Type            Reason                  Message
  ---------     --------        -----   ----                                    -------------   --------        ------                  -------
  3m            3m              1       service-account-oauth-client-getter                     Warning         NoSAOAuthRedirectURIs   system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>

下方列出可能的事件错误:

无重定向 URI 注解或指定了无效的 URI

Reason                  Message
NoSAOAuthRedirectURIs   system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>

指定了无效的路由

Reason                  Message
NoSAOAuthRedirectURIs   [routes.route.openshift.io "<name>" not found, system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>]

指定了无效的引用类型

Reason                  Message
NoSAOAuthRedirectURIs   [no kind "<name>" is registered for version "v1", system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>]

缺少 SA 令牌

Reason                  Message
NoSAOAuthTokens         system:serviceaccount:myproject:proxy has no tokens
4.1.4.3.1.1. 因为可能的错误配置导致的示例 API 事件

以下步骤代表用户可以进入出现问题状态的一种方法,以及如何调试或修复问题:

  1. 将服务帐户用作 OAuth 客户端,创建项目。

    1. 为代理服务帐户对象创建 YAML,并确保它使用路由代理

      $ vi serviceaccount.yaml

      添加以下示例代码:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: proxy
        annotations:
          serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"proxy"}}'
    2. 为路由对象创建 YAML,以创建与代理的安全连接:

      $ vi route.yaml

      添加以下示例代码:

      apiVersion: route.openshift.io/v1
      kind: Route
      metadata:
        name: proxy
      spec:
        to:
          name: proxy
        tls:
          termination: Reencrypt
      apiVersion: v1
      kind: Service
      metadata:
        name: proxy
        annotations:
          service.alpha.openshift.io/serving-cert-secret-name: proxy-tls
      spec:
        ports:
        - name: proxy
          port: 443
          targetPort: 8443
        selector:
          app: proxy
    3. 为部署配置创建 YAML 以作为 sidecar 启动代理:

      $ vi proxysidecar.yaml

      添加以下示例代码:

      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        name: proxy
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: proxy
        template:
          metadata:
            labels:
              app: proxy
          spec:
            serviceAccountName: proxy
            containers:
            - name: oauth-proxy
              image: openshift3/oauth-proxy
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 8443
                name: public
              args:
              - --https-address=:8443
              - --provider=openshift
              - --openshift-service-account=proxy
              - --upstream=http://localhost:8080
              - --tls-cert=/etc/tls/private/tls.crt
              - --tls-key=/etc/tls/private/tls.key
              - --cookie-secret=SECRET
              volumeMounts:
              - mountPath: /etc/tls/private
                name: proxy-tls
      
            - name: app
              image: openshift/hello-openshift:latest
            volumes:
            - name: proxy-tls
              secret:
                secretName: proxy-tls
    4. 创建三个对象:

      $ oc create -f serviceaccount.yaml
      $ oc create -f route.yaml
      $ oc create -f proxysidecar.yaml
  2. 运行 oc edit sa/proxy 以编辑服务帐户,并将 serviceaccounts.openshift.io/oauth-redirectreference 注解更改为指向不存在的路由。

    apiVersion: v1
    imagePullSecrets:
    - name: proxy-dockercfg-08d5n
    kind: ServiceAccount
    metadata:
      annotations:
        serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"notexist"}}'
    ...
  3. 查看服务的 OAuth 日志以查找服务器错误:

    The authorization server encountered an unexpected condition that prevented it from fulfilling the request.
  4. 运行 oc get events 来查看 ServiceAccount 事件:

    $ oc get events | grep ServiceAccount

    输出示例

    23m        23m         1         proxy                    ServiceAccount                                  Warning   NoSAOAuthRedirectURIs   service-account-oauth-client-getter   [routes.route.openshift.io "notexist" not found, system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>]

4.1.4.4. 集成

所有对 OAuth 令牌的请求都包括对 <master>/oauth/authorize 的请求。大多数身份验证集成在此端点前放置身份验证代理,或者将 OpenShift Container Platform 配置为针对后备 身份提供程序 验证凭证。对 <master>/oauth/authorize 的请求可能来自不能显示交互式登录页面的用户代理,如 CLI。因此,除了交互式登录流程外,OpenShift Container Platform 也支持使用 WWW-Authenticate 质询进行验证。

如果在 <master>/oauth/authorize 端点前面放置身份验证代理,它会向未经身份验证的非浏览器用户代理发送 WWW-Authenticate 质询,而不是显示交互式登录页面或重定向到交互式登录流程。

注意

为防止浏览器客户端遭受跨站点请求伪造(CSRF)攻击,只有在请求中存在 X-CSRF-Token 标头时,才应发送基本身份验证质询。希望接收基本 WWW-Authenticate 质询的客户端应将此标头设置为非空值。

如果身份验证代理不支持 WWW-Authenticate 质询,或者如果 OpenShift Container Platform 配置为使用不支持 WWW-Authenticate 质询的身份提供程序,用户可以使用浏览器访问 <master> /oauth/token/request 来手动获取访问令牌。

4.1.4.5. OAuth Server Metadata

在 OpenShift Container Platform 中运行的应用可能需要发现有关内置 OAuth 服务器的信息。例如,他们可能需要发现没有手工配置的 <master> 服务器的地址。为此,OpenShift Container Platform 实施了 IETF OAuth 2.0 授权服务器元数据草案规范。

因此,集群中运行的任何应用程序都可以向 https://openshift.default.svc/.well-known/oauth-authorization-server 发出 GET 请求来获取以下信息:

{
  "issuer": "https://<master>", 1
  "authorization_endpoint": "https://<master>/oauth/authorize", 2
  "token_endpoint": "https://<master>/oauth/token", 3
  "scopes_supported": [ 4
    "user:full",
    "user:info",
    "user:check-access",
    "user:list-scoped-projects",
    "user:list-projects"
  ],
  "response_types_supported": [ 5
    "code",
    "token"
  ],
  "grant_types_supported": [ 6
    "authorization_code",
    "implicit"
  ],
  "code_challenge_methods_supported": [ 7
    "plain",
    "S256"
  ]
}
1
授权服务器的签发者标识符,它是使用 https 方案且没有查询或分段组件的 URL。这是包含授权服务器有关信息的 .well-known RFC 5785 资源的发布位置。
2
授权服务器的授权端点的 URL。参见 RFC 6749
3
授权服务器的令牌端点的 URL。参见 RFC 6749
4
包含此授权服务器支持的 OAuth 2.0 RFC 6749 范围值列表的 JSON 数组。请注意,并非所有支持的范围值都会公告。
5
包含此授权服务器支持的 OAuth 2.0 response_type 值列表的 JSON 数组。使用的数组值与 response_types 参数(根据 RFC 7591 中“OAuth 2.0 Dynamic Client Registration Protocol”定义)使用的数组值相同。
6
包含此授权服务器支持的 OAuth 2.0 授权类型值列表的 JSON 数组。使用的数组值与通过 grant_types 参数(根据 RFC 7591 中“OAuth 2.0 Dynamic Client Registration Protocol”定义)使用的数组值相同。
7
包含此授权服务器支持的 PKCE RFC 7636 代码质询方法列表的 JSON 数组。code_challenge_method 参数中使用的代码质询方法值在 RFC 7636 第 4.3 节中定义。有效的代码质询方法值是在 IANA PKCE Code Challenge Methods 注册表中注册的值。请参阅 IANA OAuth 参数

4.1.4.6. 获取 OAuth 令牌

OAuth 服务器支持标准的授权代码授权隐式授权 OAuth 授权流。

运行以下命令,使用授权代码授权方法请求 OAuth 令牌:

$ curl -H "X-Remote-User: <username>" \
     --cacert /etc/origin/master/ca.crt \
     --cert /etc/origin/master/admin.crt \
     --key /etc/origin/master/admin.key \
     -I https://<master-address>/oauth/authorize?response_type=token\&client_id=openshift-challenging-client | grep -oP "access_token=\K[^&]*"

在使用隐式授权流 (response_type=token) 以及配置为请求 WWW-Authenticate 质询(如 openshift-challenging-client)的 client_id 以请求 OAuth 令牌时,可能来自 /oauth/authorize 的服务器响应及它们的处理方式如下方所列:

状态内容客户端响应

302

Location 标头含有 URL 片段中的 access_token 参数 (RFC 4.2.2)

使用 access_token 值作为 OAuth 令牌

302

Location 标头包含 error 查询参数 (RFC 4.1.2.1)

失败,或向用户显示 error(使用可选的 error_description)查询值

302

其他 Location 标头

接续重定向操作,并使用这些规则处理结果

401

WWW-Authenticate 标头存在

在识别了类型时(如 BasicNegotiate 等)响应质询,重新提交请求,再使用这些规则处理结果

401

没有 WWW-Authenticate 标头

无法进行质询身份验证。失败,并显示响应正文(可能包含用于获取 OAuth 令牌的链接或备用方法详情)

其他

其他

失败,或可向用户显示响应正文

使用隐式授权流请求 OAuth 令牌:

$ curl -u <username>:<password>
'https://<master-address>:8443/oauth/authorize?client_id=openshift-challenging-client&response_type=token' -skv / 1
/ -H "X-CSRF-Token: xxx" 2

输出示例

*   Trying 10.64.33.43...
* Connected to 10.64.33.43 (10.64.33.43) port 8443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
*        server certificate verification SKIPPED
*        server certificate status verification SKIPPED
*        common name: 10.64.33.43 (matched)
*        server certificate expiration date OK
*        server certificate activation date OK
*        certificate public key: RSA
*        certificate version: #3
*        subject: CN=10.64.33.43
*        start date: Thu, 09 Aug 2018 04:00:39 GMT
*        expire date: Sat, 08 Aug 2020 04:00:40 GMT
*        issuer: CN=openshift-signer@1531109367
*        compression: NULL
* ALPN, server accepted to use http/1.1
* Server auth using Basic with user 'developer'
> GET /oauth/authorize?client_id=openshift-challenging-client&response_type=token HTTP/1.1
> Host: 10.64.33.43:8443
> Authorization: Basic ZGV2ZWxvcGVyOmRzc2Zkcw==
> User-Agent: curl/7.47.0
> Accept: */*
> X-CSRF-Token: xxx
>
< HTTP/1.1 302 Found
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Expires: Fri, 01 Jan 1990 00:00:00 GMT
< Location:
https://10.64.33.43:8443/oauth/token/implicit#access_token=gzTwOq_mVJ7ovHliHBTgRQEEXa1aCZD9lnj7lSw3ekQ&expires_in=86400&scope=user%3Afull&token_type=Bearer 1
< Pragma: no-cache
< Set-Cookie: ssn=MTUzNTk0OTc1MnxIckVfNW5vNFlLSlF5MF9GWEF6Zm55Vl95bi1ZNE41S1NCbFJMYnN1TWVwR1hwZmlLMzFQRklzVXRkc0RnUGEzdnBEa0NZZndXV2ZUVzN1dmFPM2dHSUlzUmVXakQ3Q09rVXpxNlRoVmVkQU5DYmdLTE9SUWlyNkJJTm1mSDQ0N2pCV09La3gzMkMzckwxc1V1QXpybFlXT2ZYSmI2R2FTVEZsdDBzRjJ8vk6zrQPjQUmoJCqb8Dt5j5s0b4wZlITgKlho9wlKAZI=; Path=/; HttpOnly; Secure
< Date: Mon, 03 Sep 2018 04:42:32 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 10.64.33.43 left intact

1
client-id 设置为 openshift-challenging-clientresponse-type 设置为 token
2
X-CSRF-Token 标头设置为非空值。
1
该令牌在 302 响应的 Location 标头中返回为 access_token=gzTwOq_mVJ7ovHliHBTgRQEEXa1aCZD9lnj7lSw3ekQ

要只查看 OAuth 令牌值,请运行以下命令:

$ curl -u <username>:<password> /
'https://<master-address>:8443/oauth/authorize?client_id=openshift-challenging-client&response_type=token' / 1
-skv -H "X-CSRF-Token: xxx" --stderr - |  grep -oP "access_token=\K[^&]*" 2
1
client-id 设置为 openshift-challenging-clientresponse-type 设置为 token
2
X-CSRF-Token 标头设置为非空值。

输出示例

hvqxe5aMlAzvbqfM2WWw3D6tR0R2jCQGKx0viZBxwmc

您还可以使用 Code Grant 方法请求令牌。

4.1.4.7. Prometheus 身份验证指标

OpenShift Container Platform 在身份验证尝试过程中捕获以下 Prometheus 系统指标:

  • openshift_auth_basic_password_count 统计 oc login 用户名和密码的尝试次数。
  • openshift_auth_basic_password_count_result 按照结果(success 或 error)统计 oc login 用户名和密码尝试次数。
  • openshift_auth_form_password_count 统计 web 控制台登录尝试次数。
  • openshift_auth_form_password_count_result 统计 web 控制台登录尝试次数(包括成功和失败的登陆尝试)。
  • openshift_auth_password_total 统计 oc login 和 web 控制台登录尝试总次数。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.