本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
配置外部授权服务器
授权服务器是负责对客户端 SDK 和 Agent 进行身份验证和授权的服务器。
默认情况下,会话管理器使用 Broker 作为授权服务器来为客户端 SDK 和 Agent 的软件语句生成 OAuth 2.0 访问令牌。如果您使用 Broker 作为授权服务器,则不需要额外的配置。
您可以将会话管理器配置为使用 Amazon Cognito 作为外部授权服务器而不是经纪商。有关 Amazon Cognito 的更多信息,请参阅Amazon Cognito 开发人员指南.
使用 Amazon Cognito 作为授权服务器
-
创建新的 Amazon Cognito 用户池。有关用户池的更多信息,请参阅Amazon Cognito 的功能中的Amazon Cognito 开发人员指南.
使用创建用户池命令,然后指定池名称和要在其中创建池名称的区域。
在此示例中,我们将池命名为。
dcv-session-manager-client-app
然后我们在创建它us-east-1
.$
aws cognito-idp create-user-pool --pool-namedcv-session-manager-client-app
--regionus-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
,您在下一个步骤中需要使用该值。 -
为您的用户池创建新的域。使用创建用户池域命令,然后指定域名和
userPoolId
的用户池的值。在此示例中,域名为
mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE
然后我们在创建它us-east-1
.$
aws cognito-idp create-user-pool-domain --domainmydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE
--user-pool-idus-east-1_QLEXAMPLE
--regionus-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.comhttps://mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE.auth.us-east-1.amazoncognito.com
. -
创建用户池客户端。使用创建用户池客户端命令并指定
userPoolId
所创建的用户池、客户端的名称以及要在其中创建它的区域。另外,请包括--generate-secret
选项,以指定要为正在创建的用户池客户端生成密码的选项。在这种情况下,客户端名为
dcv-session-manager-client-app
然后我们在us-east-1
区域。$
aws cognito-idp create-user-pool-client --user-pool-idus-east-1_QLEXAMPLE
--client-namedcv-session-manager-client-app
--generate-secret --regionus-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 } }
注意 记下
ClientId
和ClientSecret
. 当开发人员请求 API 请求访问令牌时,您需要向开发人员提供此信息。 -
为用户池创建新的 OAuth2.0 资源服务器。资源服务器是访问受保护的资源的服务器。它处理已验证的访问令牌请求。
使用创建资源服务器命令并指定
userPoolId
用户池、资源服务器的唯一标识符和名称、范围以及要在其中创建该服务器的区域。在此示例中,我们使用的是
dcv-session-manager
作为标识符和名称,我们使用sm_scope
作为范围名称和描述。$
aws cognito-idp create-resource-server --user-pool-idus-east-1_QLEXAMPLE
--identifierdcv-session-manager
--namedcv-session-manager
--scopes ScopeName=sm_scope
,ScopeDescription=sm_scope
--regionus-east-1
输出示例
{ "ResourceServer": { "UserPoolId": "us-east-1_QLEXAMPLE", "Identifier": "dcv-session-manager", "Name": "dcv-session-manager", "Scopes": [ { "ScopeName": "sm_scope", "ScopeDescription": "sm_scope" }] } }
-
更新用户池客户端。
使用更新用户池客户端命令。指定
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-idus-east-1_QLEXAMPLE
--client-id2l9273hp6k2ut5cugg9EXAMPLE
--allowed-o-auth-flows client_credentials --allowed-o-auth-scopesdcv-session-manager
/sm_scope
--allowed-o-auth-flows-user-pool-client --regionus-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 -
测试配置。
$
curl -H "Authorization: Basic `echo -n2l9273hp6k2ut5cugg9EXAMPLE
: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" }
-
注册外部授权服务器以便在经纪商中使用注册身份验证服务器命令。
$
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 会话管理器开发者指南.