Como acessar os Serviços da AWS usando um banco de identidades após o login - Amazon Cognito

Como acessar os Serviços da AWS usando um banco de identidades após o login

Depois que os usuários fazem login com um grupo de usuários, eles podem acessar Serviços da AWS com credenciais de API temporárias emitidas de um banco de identidades.

Sua aplicação web ou móvel recebe tokens de um grupo de usuários. Quando você configura o grupo de usuários como um provedor de identidades para o banco de identidades, o banco troca tokens por credenciais da AWS temporárias. Essas credenciais podem ser definidas de acordo com os perfis do IAM e suas políticas, que dão aos usuários acesso a um conjunto limitado de recursos da AWS. Para ter mais informações, consulte Fluxo de autenticação dos bancos de identidades.

O diagrama a seguir mostra como uma aplicação faz login com um grupo de usuários, recupera as credenciais do banco de identidades e solicita um ativo de um AWS service (Serviço da AWS).

Um diagrama de fluxo de uma aplicação que se autentica com um grupo de usuários do Amazon Cognito e autoriza o acesso a recursos da AWS com um banco de identidades.

Você pode usar as credenciais do banco de identidades para:

  • Fazer solicitações de autorização detalhadas para o Amazon Verified Permissions com as próprias credenciais do seu usuário.

  • Conectar-se a uma API REST do Amazon API Gateway ou a uma API GraphQL do AWS AppSync que autorize conexões com o IAM.

  • Conectar-se a um backend de banco de dados, como Amazon DynamoDB ou Amazon RDS, que autoriza conexões com o IAM.

  • Recuperar ativos da aplicação de um bucket do Amazon S3.

  • Iniciar uma sessão com uma área de trabalho virtual do Amazon WorkSpaces.

Os bancos de identidades não operam exclusivamente em uma sessão autenticada com um grupo de usuários. Eles também aceitam autenticação diretamente de provedores de identidades de terceiros e podem gerar credenciais para usuários convidados não autenticados.

Para mais informações sobre o uso dos bancos de identidades junto com grupos de usuários para controlar o acesso aos recursos da AWS, consulte Como adicionar grupos a um grupo de usuários e Controle de acesso com base em perfil. Consulte também AWS Identity and Access Management para obter mais informações sobre bancos de identidades e Fluxo de autenticação dos bancos de identidades.

Como configurar um grupo de usuários com o AWS Management Console

Crie um grupo de usuários do Amazon Cognito e anote o ID de grupos de usuários e o ID do cliente da aplicação de cada uma das suas aplicações clientes. Para obter mais informações sobre como criar grupos de usuários, consulte Conceitos básicos dos grupos de usuários.

Como configurar um grupo de identidades com o AWS Management Console

O procedimento a seguir descreve como usar o AWS Management Console para integrar um grupo de identidades com um ou mais grupos de usuários e aplicativos cliente.

Como adicionar um provedor de identidades (IdP) de grupos de usuários do Amazon Cognito
  1. Selecione Bancos de identidades no console do Amazon Cognito. Selecione um banco de identidades.

  2. Selecione a guia Acesso do usuário.

  3. Selecione Adicionar provedor de identidade.

  4. Selecione Grupo de usuários do Amazon Cognito.

  5. Insira um ID de grupo de usuários e um ID de cliente de aplicativo.

  6. Para alterar o perfil que o Amazon Cognito solicita ao emitir credenciais para usuários que se autenticaram com esse provedor, defina Configurações de perfil.

    1. Você pode conceder aos usuários desse IdP o Perfil padrão que você configurou ao definir seu Perfil autenticado ou Escolher perfil com regras. Com um IdP de grupo de usuários do Amazon Cognito, você também pode Escolher perfil com a reivindicação preferred_role em tokens. Para ter mais informações sobre a declaração cognito:preferred_role, consulte Como atribuir valores de precedência a grupos.

      1. Se você escolheu Escolher perfil com regras, insira a Declaração de origem da autenticação do usuário, o Operador pelo qual você deseja comparar a reivindicação à regra, o Valor que gerará uma correspondência com essa opção de perfil e o Perfil que você deseja atribuir quando houver correspondência com a Atribuição de perfil. Selecione Adicionar outra para criar uma regra adicional com base em uma condição diferente.

      2. Se você selecionar Escolher perfil com a reivindicação preferred_role em tokens, o Amazon Cognito emitirá credenciais para o perfil na reivindicação do usuário cognito:preferred_role. Se nenhuma reivindicação de perfil preferencial estiver presente, o Amazon Cognito emitirá credenciais com base na Resolução de função.

    2. Selecione uma Resolução de perfil. Quando as declarações do usuário não correspondem às suas regras, você pode negar ou emitir credenciais para seu Perfil autenticado.

  7. Para alterar as tags de identidade principal que o Amazon Cognito atribui ao emitir credenciais para usuários que se autenticaram com esse provedor, configure Atributos para controle de acesso.

    • Para não aplicar nenhuma tag de entidade principal, selecione Inativo.

    • Para aplicar tags de entidade principal com base em declarações sub e aud, selecione Usar mapeamentos padrão.

    • Para criar seu próprio esquema personalizado de atributos para as tags de entidade principal, selecione Usar mapeamentos personalizados. Depois, insira a Chave de tag que você deseja obter de cada declaração e representar em uma tag.

  8. Selecione Save Changes (Salvar alterações).

Como integrar um grupo de usuários com um grupo de identidades

Depois que o usuário do aplicativo for autenticado, adicione o token de identidade desse usuário ao mapa de logins no provedor de credenciais. O nome do provedor dependerá do ID do grupo de usuários do Amazon Cognito. Ele terá a seguinte estrutura:

cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>

Você pode extrair o valor de <region> a partir do ID do grupo de usuários. Por exemplo, se o ID do grupo de usuários for us-east-1_EXAMPLE1, então <region> será us-east-1. Se o ID do grupo de usuários for us-west-2_EXAMPLE2, então <region> será us-west-2.

JavaScript
var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, result) { if (result) { console.log('You are now logged in.'); // Add the User's Id Token to the Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', Logins: { 'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken() } }); } }); }
Android
cognitoUser.getSessionInBackground(new AuthenticationHandler() { @Override public void onSuccess(CognitoUserSession session) { String idToken = session.getIdToken().getJWTToken(); Map<String, String> logins = new HashMap<String, String>(); logins.put("cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>", session.getIdToken().getJWTToken()); credentialsProvider.setLogins(logins); } });
iOS - objective-C
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID" clientSecret:@"YOUR_CLIENT_SECRET" poolId:@"YOUR_USER_POOL_ID"]; [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"]; AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID" identityProviderManager:pool];
iOS - swift
let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil) let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID") AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool") let pool = AWSCognitoIdentityUserPool(forKey: "UserPool") let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)