从版本 10.4.2 开始,可以将 VMware Cloud Director 用作租户感知的身份提供程序代理服务器。

使用 OAuth 2.0 OpenID Connect 标准将 VMware Cloud Director 配置为身份提供程序代理服务器时,依赖方可以使用 VMware Cloud DirectorVMware Cloud Director 已知的用户进行租户感知身份验证。有关 OpenID Connect 标准的详细信息,请参见 OpenID Connect Core 1.0

作为身份提供程序代理服务器,VMware Cloud Director 会充当客户端应用程序(依赖方)和身份提供程序之间的中介,并将实际身份验证委派给提供程序或租户使用的相应身份验证机制。

系统管理员可以配置与 VMware Cloud Director 集成的依赖方,然后单个租户允许其用户将 VMware Cloud Director 用作身份提供程序代理。

身份验证流程

VMware Cloud Director 的集成通过 OAuth 2.0 OIDC 授权代码流标准实现。有关详细信息,请参见使用授权代码流进行身份验证

当依赖方将用户重定向到 VMware Cloud Director 时,如果没有现有的客户端会话,系统会提示用户先标识要登录的组织或提供程序门户,然后再登录 VMware Cloud Director。用户通过配置的身份验证机制进行身份验证,这可能需要进一步重定向到外部身份提供程序。如果用户的浏览器检测到现有的 VMware Cloud Director 用户会话,则身份验证流程会提供 SSO 体验,并且无需用户交互即可重新进行身份验证。成功完成此过程后,VMware Cloud Director 会返回访问令牌和 ID 令牌。作为流程的一部分发布的授权代码在 5 分钟内有效。访问令牌的有效期为 5 分钟,ID 令牌的有效期为 1 小时。

注:

VMware Cloud Director 不返回刷新令牌。

无法使用 VMware Cloud Director 在成功进行身份验证后返回的访问令牌来访问 UI 门户或进行定期 VMware Cloud Director API 调用。

ID 令牌详细信息

VMware Cloud Director 返回的 ID 令牌包含以下 OpenID 标准声明和 VMware Cloud Director 特定声明。

声明

描述

at_hash

(OpenID 标准声明)访问令牌哈希值。

sub

(OpenID 标准声明)UUID 格式的 VMware Cloud Director 中的 userId

iss

(OpenID 标准声明)VMware Cloud Director 的公用地址。

preferred_username

(OpenID 标准声明)VMware Cloud Director 中的用户的用户名

nonce

(OpenID 标准声明)用于将客户端会话与 ID 令牌关联并缓解重放攻击的字符串值。仅当最初包含在依赖方请求中时才存在。

aud

(OpenID 标准声明)此令牌的受众。该值是请求依赖方的客户端 ID。

azp

(OpenID 标准声明)令牌的授权方。该值是依赖方的客户端 ID。其值与 aud 声明相同。

name

(OpenID 标准声明)VMware Cloud Director 已知的用户的全名。

phone_number

(OpenID 标准声明)VMware Cloud Director 已知的用户的电话号码。

exp

(OpenID 标准声明)过期时间。在经过该时间后,不接受 ID 令牌进行处理。

iat

(OpenID 标准声明)ID 令牌的颁发时间。

email

(OpenID 标准声明)VMware Cloud Director 已知的用户的电子邮件地址。

roles

VMware Cloud Director 自定义声明)用户在 VMware Cloud Director 中拥有的角色的名称阵列。

groups

VMware Cloud Director 自定义声明)VMware Cloud Director 中用户所属的组的名称阵列。

org_name

VMware Cloud Director 自定义声明)用户登录的组织的名称。

org_display_name

VMware Cloud Director 自定义声明)显示组织的名称。

org_id

VMware Cloud Director 自定义声明)UUID 格式的组织 ID。

OpenID 请求范围

OpenID 请求的范围用于指定为访问令牌请求的权限。

范围值

描述。

openid

必需。OpenID 标准范围。

profile

OpenID 标准范围。请求访问最终用户的默认配置文件声明。

email

OpenID 标准范围。请求访问最终用户电子邮件地址声明。

groups

OpenID 标准范围。请求访问用户在 VMware Cloud Director 中所属的组。

phone

OpenID 标准范围。请求访问用户电话号码声明。

vcd_idp

VMware Cloud Director 特定范围。请求访问 VMware Cloud Director 自定义声明,例如 rolesgroupsorg_nameorg_display_nameorg_id

端点
  • 可以使用 VMware Cloud Director 返回的访问令牌检索有关在 hostname/oidc/UserInfo 端点上已经过身份验证的用户的声明。有关详细信息,请参见用户信息端点

  • 可以在已知配置 URL hostname/oidc/.well-known/openid-configuration 检索提供程序配置值,包括 JWKS 端点以及与 OIDC 代理配置所需的其他端点和范围有关的信息。请参见查看 OIDC 代理常规设置

VMware Cloud Director 身份提供程序代理的令牌交换访问

通过下面详细介绍的令牌交换流程,可以与 VMware Cloud Director 的身份提供程序代理功能进行编程集成。此流程不涉及 VMware Cloud Director UI,适合脚本化访问,例如 CLI。

  1. 通过直接登录或使用 API 令牌获取 VMware Cloud Director JWT。

  2. 运行 POST 请求。

    POST  hostname/oidc/oauth2/token
    1. 为请求正文选择 x-www-form-urlencoded

    2. 在请求正文中包含以下参数。

      {
           "grant_type": "urn:ietf:params:oauth:grant-type:jwt-bearer",
           "assertion": "VMware_Cloud_Director JWT",
           "client_id": "Relying_party_ID",
           "scope": "openid profile email phone groups vcd_idp",
         }
  3. 响应将返回一个 ID 令牌(包括 OIDC 和 VMware Cloud Director 声明),以及一个访问令牌,您可以使用该令牌检索有关在 hostname/oidc/UserInfo 端点上已经过身份验证的用户的声明。

编码的 ID 令牌示例:

eyJhbGciOiJSUzI1NiIsInR5NDg4SI6I................4dHnbU1RQ6Y9Yohgw

解码的 ID 令牌示例:

{
  "at_hash": "1AA1aAA1AAAAAAaAA1A11a",
  "sub": "111111111-1111-1111-1111-11111111",
  "roles": [
    "Organization Administrator"
  ],
  "iss": "https://hostname/oidc",
  "groups": [
    "ALL USERS"
  ],
  "preferred_username": "testuser@vcd-ms1",
  "nonce": "ab123acab",
  "aud": "33333333-3333-3333-3333-33333333333",
  "azp": "22222222-2222-2222-2222-22222222",
  "org_id": "12345678-1234-1234-1234-123456789abc",
  "org_display_name": "oidcorg",
  "name": "test user",
  "phone_number": " ",
  "exp": 1111111111,
  "org_name": "oidcorg",
  "iat": 1111111111,
  "email": "[email protected]"
}

用户信息响应示例:

{
    "sub": "111111111-1111-1111-1111-11111111",
    "preferred_username": "administrator",
    "name": "administrator user",
    "email": "[email protected]",
    "phone_number": "0 (111) 222-3333",
    "roles": [ "system administrator" ],
    "groups": [],
    "org_name": "system",
    "org_display_name": "System Organization",
    "org_id": "12345678-1234-1234-1234-123456789abc"
}

多站点注意事项

在多站点部署中,每个站点充当单个身份提供程序服务器。

配对站点不提供联合身份服务器支持。这意味着,如果在登录过程中,不属于充当其身份提供程序代理的站点的租户尝试通过组织选择的多站点部署的另一个站点登录该站点,则登录会失败。