配置外部授权服务器 - NICE DCV 会话管理器
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置外部授权服务器

授权服务器是负责对客户端 SDK 和 Agent 进行身份验证和授权的服务器。

默认情况下,会话管理器使用 Broker 作为授权服务器来为客户端 SDK 和 Agent 的软件语句生成 OAuth 2.0 访问令牌。如果您使用 Broker 作为授权服务器,则不需要额外的配置。

您可以将会话管理器配置为使用 Amazon Cognito 作为外部授权服务器而不是经纪商。有关 Amazon Cognito 的更多信息,请参阅Amazon Cognito 开发人员指南.

使用 Amazon Cognito 作为授权服务器

  1. 创建新的 Amazon Cognito 用户池。有关用户池的更多信息,请参阅Amazon Cognito 的功能中的Amazon Cognito 开发人员指南.

    使用创建用户池命令,然后指定池名称和要在其中创建池名称的区域。

    在此示例中,我们将池命名为。dcv-session-manager-client-app然后我们在创建它us-east-1.

    $ aws cognito-idp create-user-pool --pool-name dcv-session-manager-client-app --region us-east-1

    输出示例

    { "UserPoolClient": { "UserPoolId": "us-east-1_QLEXAMPLE", "ClientName": "dcv-session-manager-client-app", "ClientId": "15hhd8jij74hf32f24uEXAMPLE", "LastModifiedDate": 1602510048.054, "CreationDate": 1602510048.054, "RefreshTokenValidity": 30, "AllowedOAuthFlowsUserPoolClient": false } }

    记下userPoolId,您在下一个步骤中需要使用该值。

  2. 为您的用户池创建新的域。使用创建用户池域命令,然后指定域名和userPoolId的用户池的值。

    在此示例中,域名为mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE然后我们在创建它us-east-1.

    $ aws cognito-idp create-user-pool-domain --domain mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE --user-pool-id us-east-1_QLEXAMPLE --region us-east-1

    输出示例

    { "DomainDescription": { "UserPoolId": "us-east-1_QLEXAMPLE", "AWSAccountId": "123456789012", "Domain": "mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE", "S3Bucket": "aws-cognito-prod-pdx-assets", "CloudFrontDistribution": "dpp0gtexample.cloudfront.net", "Version": "20201012133715", "Status": "ACTIVE", "CustomDomainConfig": {} } }

    用户池域的格式如下:https://domain_name.auth.region.amazoncognito.com. 在此示例中,用户池域为https://mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE.auth.us-east-1.amazoncognito.com.

  3. 创建用户池客户端。使用创建用户池客户端命令并指定userPoolId所创建的用户池、客户端的名称以及要在其中创建它的区域。另外,请包括--generate-secret选项,以指定要为正在创建的用户池客户端生成密码的选项。

    在这种情况下,客户端名为dcv-session-manager-client-app然后我们在us-east-1区域。

    $ aws cognito-idp create-user-pool-client --user-pool-id us-east-1_QLEXAMPLE --client-name dcv-session-manager-client-app --generate-secret --region us-east-1

    输出示例

    { "UserPoolClient": { "UserPoolId": "us-east-1_QLEXAMPLE", "ClientName": "dcv-session-manager-client-app", "ClientId": "2l9273hp6k2ut5cugg9EXAMPLE", "ClientSecret": "1vp5e8nec7cbf4m9me55mbmht91u61hlh0a78rq1qki1lEXAMPLE", "LastModifiedDate": 1602510291.498, "CreationDate": 1602510291.498, "RefreshTokenValidity": 30, "AllowedOAuthFlowsUserPoolClient": false } }
    注意

    记下ClientIdClientSecret. 当开发人员请求 API 请求访问令牌时,您需要向开发人员提供此信息。

  4. 为用户池创建新的 OAuth2.0 资源服务器。资源服务器是访问受保护的资源的服务器。它处理已验证的访问令牌请求。

    使用创建资源服务器命令并指定userPoolId用户池、资源服务器的唯一标识符和名称、范围以及要在其中创建该服务器的区域。

    在此示例中,我们使用的是dcv-session-manager作为标识符和名称,我们使用sm_scope作为范围名称和描述。

    $ aws cognito-idp create-resource-server --user-pool-id us-east-1_QLEXAMPLE --identifier dcv-session-manager --name dcv-session-manager --scopes ScopeName=sm_scope,ScopeDescription=sm_scope --region us-east-1

    输出示例

    { "ResourceServer": { "UserPoolId": "us-east-1_QLEXAMPLE", "Identifier": "dcv-session-manager", "Name": "dcv-session-manager", "Scopes": [ { "ScopeName": "sm_scope", "ScopeDescription": "sm_scope" }] } }
  5. 更新用户池客户端。

    使用更新用户池客户端命令。指定userPoolId在用户池中,ClientId的用户池客户端和区域。适用于--allowed-o-auth-flows,请指定client_credentials指示客户端应该使用客户端 ID 和客户端密钥的组合从令牌终端节点获取访问令牌。适用于--allowed-o-auth-scopes中,指定资源服务器标识符和范围名称,如下所示:resource_server_identifier/scope_name. 加入--allowed-o-auth-flows-user-pool-client表示在与 Cognito 用户池进行交互时允许客户端遵循 OAuth 协议。

    $ aws cognito-idp update-user-pool-client --user-pool-id us-east-1_QLEXAMPLE --client-id 2l9273hp6k2ut5cugg9EXAMPLE --allowed-o-auth-flows client_credentials --allowed-o-auth-scopes dcv-session-manager/sm_scope --allowed-o-auth-flows-user-pool-client --region us-east-1

    输出示例

    { "UserPoolClient": { "UserPoolId": "us-east-1_QLEXAMPLE", "ClientName": "dcv-session-manager-client-app", "ClientId": "2l9273hp6k2ut5cugg9EXAMPLE", "ClientSecret": "1vp5e8nec7cbf4m9me55mbmht91u61hlh0a78rq1qki1lEXAMPLE", "LastModifiedDate": 1602512103.099, "CreationDate": 1602510291.498, "RefreshTokenValidity": 30, "AllowedOAuthFlows": [ "client_credentials" ], "AllowedOAuthScopes": [ "dcv-session-manager/sm_scope" ], "AllowedOAuthFlowsUserPoolClient": true } }
    注意

    用户池现在已准备好提供和验证访问令牌。在此示例中,授权服务器的 URL 为https://cognito-idp.us-east-1.amazonaws.com/us-east-1_QLEXAMPLE/.well-known/jwks.json.

  6. 测试配置。

    $ curl -H "Authorization: Basic `echo -n 2l9273hp6k2ut5cugg9EXAMPLE:1vp5e8nec7cbf4m9me55mbmht91u61hlh0a78rq1qki1lEXAMPLE | base64`" -H "Content-Type: application/x-www-form-urlencoded" -X POST "https://mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE.auth.us-east-1.amazoncognito.com/oauth2/token?grant_type=client_credentials&scope=dcv-session-manager/sm_scope"

    输出示例

    { "access_token":"eyJraWQiOiJGQ0VaRFpJUUptT3NSaW41MmtqaDdEbTZYb0RnSTQ5b2VUT0cxUUI1Q2VJPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIybDkyNzNocDZrMnV0NWN1Z2c5dWg4ZGx0cCIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiZGN2LXNlc3Npb24tbWFuYWdlclwvcGVybWlzc2lvbnMiLCJhdXRoX3RpbWUiOjE2MDI1MTMyODMsImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbVwvdXMtd2VzdC0yX1FMZTA3SU9GViIsImV4cCI6MTYwMjUxNjg4MywiaWF0IjoxNjAyNTEzMjgzLCJ2ZXJzaW9uIjoyLCJqdGkiOiIyMDk2YTg4NS04YWQ0LTRmYjgtYjI2Mi1hMmNkNDk0OGZjNjYiLCJjbGllbnRfaWQiOiIybDkyNzNocDZrMnV0NWN1Z2c5dWg4ZGx0cCJ9.ZLZpS4CiiLq1X_VSm911hNT4g8A0FKZXScVJyyV0ijcyOfUOBcpgSMGqJagLYORFuYwLS5c7g4eO04wIwnw21ABGIDcOMElDPCJkrzjfLEPS_eyK3dNmlXDEvdS-Zkfi0HIDsd6audjTXKzHlZGScr6ROdZtId5dThkpEZiSx0YwiiWe9crAlqoazlDcCsUJHIXDtgKW64pSj3-uQQGg1Jv_tyVjhrA4JbD0k67WS2V9NW-uZ7t4zwwaUmOi3KzpBMi54fpVgPaewiVlUm_aS4LUFcWT6hVJjiZF7om7984qb2gOa14iZxpXPBJTZX_gtG9EtvnS9uW0QygTJRNgsw", "expires_in":3600, "token_type":"Bearer" }
  7. 注册外部授权服务器以便在经纪商中使用注册身份验证服务器命令。

    $ sudo -u root dcv-session-manager-broker register-auth-server --url https://cognito-idp.us-east-1.amazonaws.com/us-east-1_QLEXAMPLE/.well-known/jwks.json

开发人员现在可以使用服务器请求访问令牌。请求访问令牌时,请提供在此生成的客户端 ID、客户端密钥和服务器 URL。有关请求访问令牌的更多信息,请参阅创建获取访问令牌并发出 API 请求中的NICE DCV 会话管理器开发者指南.