設定外部授權伺服器 - NICEDCV會話管理器

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定外部授權伺服器

授權伺服器是負責驗證和授權用戶端 SDK 和代理程式的伺服器。

依預設,工作階段管理員會使用代理程式做為授權伺服器,為用戶端 SDK 和代理程式的軟體陳述式產生 OAuth 2.0 存取權杖。如果您使用 Broker 做為授權伺服器,則不需額外進行設定。

您可以將工作階段管理員設定為使用 Amazon Cognito 做為外部授權伺服器,而不是代理人。如需有關 Amazon Cognito 的詳細資訊,請參閱 Amazon Cognito 開發人員指南

使用 Amazon Cognito 作為授權伺服器
  1. 建立新的 Amazon Cognito 使用者集區。如需有關使用者集區的詳細資訊,請參閱 Amazon Cognito 開發人員指南中的 Amazon Cognito 功能

    使用指create-user-pool令,並指定儲存池名稱以及要在其中建立該集區的「區域」。

    在此範例中,我們為池命名,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. 建立使用者集區的新網域。使用命create-user-pool-domain令,並指定您在前一個步驟中所建立使用者集區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. 建立使用者集區用戶端。使用命create-user-pool-client令並指定您建立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 資源伺服器。資源伺服器是用於存取受保護之資源的伺服器。它處理訪問令牌的身份驗證請求。

    使用命create-resource-server令並指定使用者集區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. 更新使用者集區用戶端。

    使用 update-user-pool-client 命令。指定使userPoolId用者集區、使用者集區用戶端ClientId的,以及區域。對於--allowed-o-auth-flows,指定client_credentials以指示用戶端應該使用用戶端 ID 和用戶端密碼的組合,從 Token 端點取得存取權杖。對於--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. 使用register-auth-server指令註冊外部授權伺服器,以便與 Broker 搭配使用。

    $ 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。有關請求訪問令牌的更多信息,請參閱 NICE DCV 會話管理器開發人員指南中的創建獲取訪問令牌並發出 API 請求