本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定外部授權伺服器
授權伺服器是負責驗證和授權用戶端 SDKs 和代理程式的伺服器。
根據預設,Session Manager 會使用代理程式做為授權伺服器,為用戶端 SDK 產生 OAuth 2.0 存取權杖,以及為代理程式產生軟體陳述式。 SDKs 如果您使用代理程式做為授權伺服器,則不需要額外的組態。
您可以設定 Session Manager 使用 Amazon Cognito 做為外部授權伺服器,而非代理程式。如需 Amazon Cognito 的詳細資訊,請參閱 Amazon Cognito 開發人員指南。
使用 Amazon Cognito 做為授權伺服器
-
建立新的 Amazon Cognito 使用者集區。如需使用者集區的詳細資訊,請參閱《Amazon Cognito 開發人員指南》中的 Amazon Cognito 功能。 Amazon Cognito
使用 create-user-pool 命令,並指定集區名稱和要在其中建立集區的區域。
在此範例中,我們將集區命名
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
,在下一個步驟中您將需要它。 -
為您的使用者集區建立新的網域。使用 create-user-pool-domain 命令,並指定您在上一個步驟中建立
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
。 -
建立使用者集區用戶端。使用 create-user-pool-client 命令,並指定您建立
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 資源伺服器。資源伺服器是用於存取受保護之資源的伺服器。它處理已驗證的存取權杖請求。
使用 create-resource-server 命令,並指定使用者集
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" }] } }
-
更新使用者集區用戶端。
使用 update-user-pool-client 命令。指定
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" }
-
使用 register-auth-server命令註冊外部授權伺服器,以便與代理程式搭配使用。
$
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。如需請求存取權杖的詳細資訊,請參閱《Amazon DCV Session Manager 開發人員指南》中的建立取得存取權杖和提出 API 請求。