

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar um servidor de autorização externo
<a name="ext-auth"></a>

O servidor de autorização é o servidor que autentica e autoriza os SDKs e atendentes do cliente.

Por padrão, o gerenciador de sessões usa o Agente como servidor de autorização para gerar tokens de acesso OAuth 2.0 para SDKs de clientes e declarações de software para atendentes. Se você usar o Agente como servidor de autorização, não será preciso configurar mais nada.

Você pode configurar o gerenciador de sessões para usar o Amazon Cognito como um servidor de autorização externo em vez do Agente. Para mais informações sobre o Amazon Cognito, consulte o [Guia do desenvolvedor do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html).

**Usar o Amazon Cognito como servidor de autorização**

1. Criar um grupo de usuários do Amazon Cognito. Para mais informações sobre grupos de usuários, consulte [Recursos do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html#feature-overview) no *Guia do desenvolvedor do Amazon Cognito*.

   Use o comando [create-user-pool](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool.html) e especifique o nome do pool e a região na qual criá-lo.

   Neste exemplo, demos o nome de `dcv-session-manager-client-app` ao pool e o criamos em `us-east-1`.

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

   Exemplo de saída

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

   Anote o valor do `userPoolId`, pois será necessário na próxima etapa.

1. Crie um novo domínio para o grupo de usuários. Use o comando [create-user-pool-domain](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-domain.html) e especifique um nome de domínio e o `userPoolId` do grupo de usuários que você criou na etapa anterior.

   Neste exemplo, o domínio se chama `mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE` e o criamos em `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
   ```

   Exemplo de saída

   ```
   {
       "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": {}
       }
   }
   ```

   O formato do domínio do grupo de usuários é o seguinte: `https://domain_name.auth.region.amazoncognito.com`. Neste exemplo, o domínio do grupo de usuários é `https://mydomain-544fa30f-c0e5-4a02-8d2a-a3761EXAMPLE.auth.us-east-1.amazoncognito.com`.

1. Crie um cliente de grupo de usuários. Use o comando [create-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) e especifique o `userPoolId` do grupo de usuários que você criou, o nome do cliente e a região na qual criá-lo. Além disso, inclua a opção `--generate-secret` para especificar que deseja gerar um segredo para o cliente do grupo de usuários que está sendo criado.

   Nesse caso, o nome do cliente é `dcv-session-manager-client-app` e o criamos na região `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
   ```

   Exemplo de saída

   ```
   {
       "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
       }
   }
   ```
**nota**  
Anote o `ClientId` e o `ClientSecret`. Você precisará fornecer essas informações aos desenvolvedores quando eles solicitarem tokens de acesso para as solicitações das APIs.

1. Crie um servidor de recursos OAuth2.0 para o grupo de usuários. Um servidor de recursos é um servidor para recursos com acesso protegido. Ele trabalha com solicitações autenticadas para tokens de acesso. 

   Use o comando [create-resource-server](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-resource-server.html) e especifique o `userPoolId` do grupo de usuários, o identificador e nome exclusivos para o servidor de recursos, o escopo e a região na qual criá-lo.

   Neste exemplo, usamos `dcv-session-manager` como identificador e nome e usamos `sm_scope` como nome e descrição do escopo.

   ```
   $ 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
   ```

   Exemplo de saída

   ```
   {
       "ResourceServer": {
           "UserPoolId": "us-east-1_QLEXAMPLE",
           "Identifier": "dcv-session-manager",
           "Name": "dcv-session-manager",
           "Scopes": [
           {
               "ScopeName": "sm_scope",
               "ScopeDescription": "sm_scope"
           }]
       }
   }
   ```

1. Atualize o cliente do grupo de usuários. 

   Use o comando [update-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html). Especifique o `userPoolId` do grupo de usuários, o `ClientId` do cliente do grupo de usuários e a região. Para `--allowed-o-auth-flows`, especifique `client_credentials` para indicar que o cliente deve obter tokens de acesso do endpoint do token usando uma combinação de ID e segredo do cliente. Para `--allowed-o-auth-scopes`, especifique o identificador do servidor de recursos e o nome do escopo da seguinte forma: `resource_server_identifier/scope_name`. Inclua `--allowed-o-auth-flows-user-pool-client` para indicar que o cliente tem permissão para seguir o protocolo OAuth ao interagir com grupos de usuários do Cognito.

   ```
   $ 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
   ```

   Exemplo de saída

   ```
   {
       "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
       }
   }
   ```
**nota**  
O grupo de usuários agora está pronto para fornecer e autenticar tokens de acesso. Neste exemplo, o URL do servidor de autorização é `https://cognito-idp.us-east-1.amazonaws.com/us-east-1_QLEXAMPLE/.well-known/jwks.json`.

1. Teste a configuração.

   ```
   $ 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"
   ```

   Exemplo de saída

   ```
   {
   "access_token":"eyJraWQiOiJGQ0VaRFpJUUptT3NSaW41MmtqaDdEbTZYb0RnSTQ5b2VUT0cxUUI1Q2VJPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiIybDkyNzNocDZrMnV0NWN1Z2c5dWg4ZGx0cCIsInRva2VuX3VzZSI6ImFjY2VzcyIsInNjb3BlIjoiZGN2LXNlc3Npb24tbWFuYWdlclwvcGVybWlzc2lvbnMiLCJhdXRoX3RpbWUiOjE2MDI1MTMyODMsImlzcyI6Imh0dHBzOlwvXC9jb2duaXRvLWlkcC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbVwvdXMtd2VzdC0yX1FMZTA3SU9GViIsImV4cCI6MTYwMjUxNjg4MywiaWF0IjoxNjAyNTEzMjgzLCJ2ZXJzaW9uIjoyLCJqdGkiOiIyMDk2YTg4NS04YWQ0LTRmYjgtYjI2Mi1hMmNkNDk0OGZjNjYiLCJjbGllbnRfaWQiOiIybDkyNzNocDZrMnV0NWN1Z2c5dWg4ZGx0cCJ9.ZLZpS4CiiLq1X_VSm911hNT4g8A0FKZXScVJyyV0ijcyOfUOBcpgSMGqJagLYORFuYwLS5c7g4eO04wIwnw21ABGIDcOMElDPCJkrzjfLEPS_eyK3dNmlXDEvdS-Zkfi0HIDsd6audjTXKzHlZGScr6ROdZtId5dThkpEZiSx0YwiiWe9crAlqoazlDcCsUJHIXDtgKW64pSj3-uQQGg1Jv_tyVjhrA4JbD0k67WS2V9NW-uZ7t4zwwaUmOi3KzpBMi54fpVgPaewiVlUm_aS4LUFcWT6hVJjiZF7om7984qb2gOa14iZxpXPBJTZX_gtG9EtvnS9uW0QygTJRNgsw",
   "expires_in":3600,
   "token_type":"Bearer"
   }
   ```

1. Registre o servidor de autorização externo para uso com o Agente usando o comando [register-auth-server](register-auth-server.md).

   ```
   $ 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
   ```

Agora, desenvolvedores podem usar o servidor para solicitar tokens de acesso. Ao solicitar tokens de acesso, forneça o ID do cliente, o segredo do cliente e o URL do servidor gerados aqui. Para mais informações sobre a solicitação de tokens de acesso, consulte [Criar um token de acesso e fazer uma solicitação de API](https://docs.aws.amazon.com/dcv/latest/sm-dev/request.html) no *Guia do desenvolvedor para o gerenciador de sessões do Amazon DCV*.