本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定外部授權伺服器
授權伺服器是負責驗證和授權用戶端 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 請求。