Configurando um provedor OIDC como um IdP do pool de identidades - Amazon Cognito

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á.

Configurando um provedor OIDC como um IdP do pool de identidades

O OpenID Connect é um padrão aberto para autenticação que é compatível com vários provedores de login. O Amazon Cognito permite vincular identidades com provedores OpenID Connect que você configura por meio do AWS Identity and Access Management.

Como adicionar um provedor OpenID Connect

Para ter informações sobre como criar um provedor OpenID Connect, consulte Criar provedores de identidades OpenID Connect (OIDC) no Guia do usuário do AWS Identity and Access Management.

Como associar um provedor ao Amazon Cognito

Como adicionar um provedor de identidades (IdP) OIDC
  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 OpenID Connect (OIDC).

  5. Escolha um provedor de identidade OIDC do IAM IdPs em seu. Conta da AWS Se você quiser adicionar um novo provedor SAML, selecione Criar provedor para navegar até o console do IAM.

  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 atribuir aos usuários desse IdP o Perfil padrão que você configurou ao definir seu Perfil autenticado ou Escolher perfil com regras.

      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 declaração, 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. 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.

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

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

    3. 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).

É possível associar vários provedores OpenID Connect a um único grupo de identidades.

Uso do OpenID Connect

Consulte a documentação do provedor sobre como fazer login e receber um token de ID.

Assim que tiver um token, adicione-o ao mapa de logins. Use o URI do provedor como chave.

Como validar um token de OpenID Connect

Ao fazer a primeira integração com o Amazon Cognito, você poderá receber uma exceção InvalidToken. É importante entender como o Amazon Cognito valida tokens de OpenID Connect.

nota

Conforme especificado aqui (https://tools.ietf.org/html/rfc7523), o Amazon Cognito oferece um período de carência de 5 minutos para lidar com qualquer defasagem do relógio entre sistemas.

  1. O parâmetro iss deve corresponder à chave que o mapa de logins usa (por exemplo, login.provider.com).

  2. A assinatura deve ser válida. A assinatura deve ser verificável por meio de uma chave de ativação pública RSA.

  3. A impressão digital da chave pública do certificado corresponde à impressão digital que você definiu no IAM quando criou seu provedor OIDC.

  4. Se o parâmetro azp estiver presente, confirme esse valor em relação aos IDs de cliente listados no provedor OIDC.

  5. Se o parâmetro azp não estiver presente, verifique o parâmetro aud em relação aos IDs de cliente listados no provedor OIDC.

O site jwt.io é um recurso valioso que você pode usar para decodificar tokens e verificar esses valores.

Android

Map<String, String> logins = new HashMap<String, String>(); logins.put("login.provider.com", token); credentialsProvider.setLogins(logins);

iOS – Objective-C

credentialsProvider.logins = @{ "login.provider.com": token }

iOS – Swift

Para fornecer o token de ID do OIDC ao Amazon Cognito, implemente o protocolo AWSIdentityProviderManager.

Na implementação do método logins, retorne um dicionário contendo o nome do provedor OIDC que você configurou. Esse dicionário atua como a chave, ao passo que o token de ID atual do usuário autenticado atua como o valor, conforme mostrado no exemplo de código a seguir.

class OIDCProvider: NSObject, AWSIdentityProviderManager { func logins() -> AWSTask<NSDictionary> { let completion = AWSTaskCompletionSource<NSString>() getToken(tokenCompletion: completion) return completion.task.continueOnSuccessWith { (task) -> AWSTask<NSDictionary>? in //login.provider.name is the name of the OIDC provider as setup in the Amazon Cognito console return AWSTask(result:["login.provider.name":task.result!]) } as! AWSTask<NSDictionary> } func getToken(tokenCompletion: AWSTaskCompletionSource<NSString>) -> Void { //get a valid oidc token from your server, or if you have one that hasn't expired cached, return it //TODO code to get token from your server //... //if error getting token, set error appropriately tokenCompletion.set(error:NSError(domain: "OIDC Login", code: -1 , userInfo: ["Unable to get OIDC token" : "Details about your error"])) //else tokenCompletion.set(result:"result from server id token") } }

Ao instanciar o AWSCognitoCredentialsProvider, passe a classe que implementa AWSIdentityProviderManager como o valor de identityProviderManager no construtor. Para obter mais informações, acesse a página de AWSCognitoCredentialsProviderreferência e escolha initWithRegionTipo:identityPoolId: identityProviderManager.

JavaScript

AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'login.provider.com': token } });

Unity

credentials.AddLogin("login.provider.com", token);

Xamarin

credentials.AddLogin("login.provider.com", token);