

# Amazon Cognito
<a name="identity-idp-cognito"></a>

O Amazon Cognito pode ser configurado como um provedor de identidade para acessar o AgentCore Gateway e o Runtime, ou um provedor de credenciais de AgentCore identidade para acesso externo a recursos. Isso permite que seus agentes autentiquem e autorizem usuários com o Cognito como provedor de identidade e servidor de autorização, ou que seus agentes obtenham credenciais para acessar recursos autorizados pelo Cognito.

## Entrada
<a name="identity-idp-cognito-inbound"></a>

Para adicionar o Cognito como provedor de identidade e servidor de autorização para acessar o AgentCore Gateway e o Runtime, você deve:
+ Configure o URL de descoberta do seu diretório IDP. Isso ajuda o AgentCore Identity a obter os metadados relacionados ao seu servidor de autorização OAuth e às chaves de verificação de token.
+ Insira `aud` reivindicações válidas `clientId` ou válidas para o token. Isso ajuda a validar os tokens provenientes do seu IDP e permite o acesso a tokens que contêm as reivindicações esperadas.

Use o procedimento a seguir para criar um grupo de usuários do Cognito como provedor de identidade de entrada para autenticação de usuários com o Runtime. AgentCore As etapas a seguir criarão um grupo de usuários do Cognito, um cliente de grupo de usuários, adicionarão um usuário e gerarão um token de portador para o usuário. Por padrão, o token é válido por 60 minutos.

 **Para criar um grupo de usuários do Cognito como provedor de identidade de entrada para autenticação Runtime** 

1. Crie um arquivo chamado `setup_cognito.sh` com o seguinte conteúdo:
**nota**  
O script a seguir serve apenas como exemplo. Você deve personalizar as configurações do grupo de usuários e as credenciais do usuário conforme necessário para seu aplicativo. Não use esse script diretamente em ambientes de produção.

   ```
   #!/bin/bash
   
   # Create User Pool and capture Pool ID directly
   export POOL_ID=$(aws cognito-idp create-user-pool \
     --pool-name "MyUserPool" \
     --policies '{"PasswordPolicy":{"MinimumLength":8}}' \
     --region us-east-1 | jq -r '.UserPool.Id')
   
   # Create App Client and capture Client ID directly
   export CLIENT_ID=$(aws cognito-idp create-user-pool-client \
     --user-pool-id $POOL_ID \
     --client-name "MyClient" \
     --no-generate-secret \
     --explicit-auth-flows "ALLOW_USER_PASSWORD_AUTH" "ALLOW_REFRESH_TOKEN_AUTH" \
     --region us-east-1 | jq -r '.UserPoolClient.ClientId')
   
   # Create User
   aws cognito-idp admin-create-user \
     --user-pool-id $POOL_ID \
     --username "testuser" \
     --temporary-password "${temp-password}" \
     --region us-east-1 \
     --message-action SUPPRESS > /dev/null
   
   # Set Permanent Password
   aws cognito-idp admin-set-user-password \
     --user-pool-id $POOL_ID \
     --username "testuser" \
     --password "${permanent-user-password}" \
     --region us-east-1 \
     --permanent > /dev/null
   
   # Authenticate User and capture Access Token
   export BEARER_TOKEN=$(aws cognito-idp initiate-auth \
     --client-id "$CLIENT_ID" \
     --auth-flow USER_PASSWORD_AUTH \
     --auth-parameters USERNAME='testuser',PASSWORD='${permanent-user-password}' \
     --region us-east-1 | jq -r '.AuthenticationResult.AccessToken')
   
   # Output the required values
   echo "Pool id: $POOL_ID"
   echo "Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/$POOL_ID/.well-known/openid-configuration"
   echo "Client ID: $CLIENT_ID"
   echo "Bearer Token: $BEARER_TOKEN"
   ```

1. Execute o script para criar os recursos do Cognito:

   ```
   source setup_cognito.sh
   ```

1. Registre os valores de saída, que serão semelhantes a:

   ```
   Pool id: us-east-1_poolid
   Discovery URL: https://cognito-idp.us-east-1.amazonaws.com/us-east-1_userpoolid/.well-known/openid-configuration
   Client ID: clientid
   Bearer Token: bearertoken
   ```

   Você precisará desses valores nas próximas etapas.

Use o procedimento a seguir para criar um grupo de usuários do Cognito como provedor de identidade de entrada para autenticação máquina a máquina com o Gateway. AgentCore As etapas a seguir criarão um pool de usuários, servidor de recursos, credenciais de cliente e configuração de URL de descoberta. Essa configuração permite fluxos de autenticação M2M para acesso ao Gateway.

 **Para criar um grupo de usuários do Cognito como provedor de identidade de entrada para autenticação do Gateway** 

1. Crie um grupo de usuários:

   ```
   aws cognito-idp create-user-pool \
     --region us-west-2 \
     --pool-name "gateway-user-pool"
   ```

1. Registre o ID do grupo de usuários da resposta ou recupere-o usando:

   ```
   aws cognito-idp list-user-pools \
     --region us-west-2 \
     --max-results 60
   ```

1. Crie um servidor de recursos para o grupo de usuários:

   ```
   aws cognito-idp create-resource-server \
     --region us-west-2 \
     --user-pool-id <UserPoolId> \
     --identifier "gateway-resource-server" \
     --name "GatewayResourceServer" \
     --scopes '[{"ScopeName":"read","ScopeDescription":"Read access"}, {"ScopeName":"write","ScopeDescription":"Write access"}]'
   ```

1. Crie um cliente para o grupo de usuários:

   ```
   aws cognito-idp create-user-pool-client \
     --region us-west-2 \
     --user-pool-id <UserPoolId> \
     --client-name "gateway-client" \
     --generate-secret \
     --allowed-o-auth-flows client_credentials \
     --allowed-o-auth-scopes "gateway-resource-server/read" "gateway-resource-server/write" \
     --allowed-o-auth-flows-user-pool-client \
     --supported-identity-providers "COGNITO"
   ```

   Registre o ID do cliente e o segredo do cliente na resposta. Você precisará desses valores para configurar o provedor Cognito no AgentCore Identity.

1. Se necessário, crie um domínio para seu grupo de usuários:

   ```
   aws cognito-idp create-user-pool-domain \
     --domain <UserPoolIdWithoutUnderscore> \
     --user-pool-id <UserPoolId> \
     --region us-west-2
   ```
**nota**  
Remova qualquer sublinhado do `UserPoolId` ao criar o domínio. Por exemplo, se o ID do grupo de usuários for “US-West-2\_GmsgKkgr9", use “US-West-2GmsgKkgr9" como domínio.

1. Crie o URL de descoberta para seu grupo de usuários do Cognito:

   ```
   https://cognito-idp.us-west-2.amazonaws.com/<UserPoolId>/.well-known/openid-configuration
   ```

1. Configure o Gateway Inbound Auth com os seguintes valores:

   1.  **URL de descoberta**: o URL construído na etapa anterior

   1.  **Clientes permitidos**: o ID do cliente obtido ao criar o cliente do grupo de usuários

## Saída
<a name="identity-idp-cognito-outbound"></a>

**nota**  
AgentCore A identidade emite uma URL exclusiva de retorno de chamada do OAuth2 para cada provedor de credenciais que você cria. O URL de retorno de chamada exclusivo permite a vinculação de sessão, o que protege a troca do código de autorização do OAuth2 contra repetições e CSRF-style ataques entre provedores, garantindo que uma resposta de autorização só possa ser resgatada contra o provedor de credenciais específico que a iniciou. Como o URL é exclusivo por provedor, você não o saberá até **depois** de ligar`CreateOauth2CredentialProvider`. Crie primeiro seu cliente do aplicativo de pool de usuários do Cognito e, em seguida, retorne ao console do Amazon Cognito para registrar o URL de retorno de chamada AgentCore após a emissão do Identity.

 **Etapa 1: Criar o cliente do aplicativo de pool de usuários do Cognito** 

Use o procedimento a seguir para configurar um cliente de aplicativo de pool de usuários do Cognito para a federação OAuth2 de saída. Você registrará o URI de redirecionamento na Etapa 3, depois que o AgentCore Identity emitir o URL de retorno de chamada exclusivo.

 **Para configurar um cliente de aplicativo de pool de usuários do Cognito** 

1. No console do Amazon Cognito, abra ou crie o grupo de usuários que você deseja usar como provedor de recursos de saída.

1. Configure um domínio de grupo de usuários para que a interface hospedada possa emitir códigos de autorização.

1. Crie um cliente de aplicativo para o grupo de usuários, gere um segredo do cliente e ative o fluxo de **concessão do código de autorização do** OAuth2.

1. Selecione os escopos do OAuth2 que seu aplicativo exige.

1. Deixe o campo **URLs de retorno de chamada permitidos** vazio por enquanto — você adicionará o URL de retorno de chamada exclusivo na Etapa 3.

1. Registre o **ID do cliente** e **o segredo do cliente**. Você precisará desses valores para configurar o provedor Cognito no AgentCore Identity.

1. Anote o prefixo do domínio e o ID do grupo de usuários. Você os usará para criar os endpoints de autorização, token e emissor na Etapa 2.

Para obter mais detalhes, consulte [Configurar um cliente de aplicativo no Guia](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html) do Desenvolvedor do Amazon Cognito.

 **Etapa 2: criar o provedor de credenciais de AgentCore identidade** 

Para configurar grupos de usuários do Cognito como um provedor de recursos de saída, use a seguinte configuração:

```
{
  "name": "Cognito",
  "credentialProviderVendor": "CognitoOauth2",
  "oauth2ProviderConfigInput" : {
    "includedOauth2ProviderConfig": {
      "clientId": "your-client-id",
      "clientSecret": "your-client-secret",
      "authorizationEndpoint": "https://{your-cognito-domain}.auth.us-east-1.amazoncognito.com/oauth2/authorize",
      "tokenEndpoint": "https://{your-cognito-domain}.auth.us-east-1.amazoncognito.com/oauth2/token",
      "issuer": "https://cognito-idp.us-east-1.amazonaws.com/{your-user-pool-id}"
    }
  }
}
```

A [CreateOauth2CredentialProvider](https://docs.aws.amazon.com/bedrock-agentcore-control/latest/APIReference/API_CreateOauth2CredentialProvider.html)resposta inclui um `callbackUrl` campo. Esse URL é exclusivo desse provedor de credenciais e se parece com:`https://bedrock-agentcore.us-east-1.amazonaws.com/identities/oauth2/callback/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. Salve esse valor para a próxima etapa.

 **Etapa 3: registrar o URL de retorno de chamada exclusivo com o Cognito** 

Retorne ao console do Amazon Cognito e adicione a URL de retorno de chamada exclusiva aos retornos de chamada permitidos pelo cliente do seu aplicativo.

1. No console do Amazon Cognito, abra o cliente do aplicativo do grupo de usuários que você criou na Etapa 1.

1. Na configuração da interface de usuário hospedada do cliente do aplicativo, adicione o `callbackUrl` valor retornado por `CreateOauth2CredentialProvider` aos **URLs de retorno de chamada permitidos**.

1. Salve as alterações.