Mapeamento de atributos de IdP para perfis e tokens - Amazon Cognito

Mapeamento de atributos de IdP para perfis e tokens

Os serviços de provedor de identidades (IdP), incluindo o Amazon Cognito, normalmente podem registrar mais informações sobre um usuário. Talvez você queira saber em qual empresa ele trabalha, como falar com ele e outras informações de identificação. Mas o formato que esses atributos assumem varia entre os provedores. Por exemplo, configure três IdPs de três fornecedores diferentes com seu grupo de usuários e verifique um exemplo de declaração SAML, token de ID ou carga útil userInfo de cada um. Um deles representará o endereço de e-mail do usuário como email, outro como emailaddress, e o terceiro como http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress.

Um grande benefício da consolidação de IdPs com um grupo de usuários é a capacidade de mapear a variedade de nomes de atributos em um único esquema de token OIDC com nomes de atributos compartilhados, previsíveis e consistentes. Dessa forma, seus desenvolvedores não precisam manter a lógica para processar uma variedade complexa de eventos de autenticação única. Essa consolidação de formato é o mapeamento de atributos. O mapeamento de atributos do grupo de usuários adiciona nomes de atributos do IdP aos nomes de atributos do grupo de usuários correspondentes. Por exemplo, você pode configurar seu grupo de usuários para gravar o valor de uma reivindicação emailaddress no atributo padrão do grupo de usuários email.

Cada IdP do grupo de usuários tem um esquema de mapeamento de atributos separado. Para especificar mapeamentos de atributos para seu IdP, configure um provedor de identidades de grupo de usuários no console do Amazon Cognito, um SDK da AWS ou a API REST de grupos de usuários.

Coisas a saber sobre mapeamentos

Antes de começar a configurar o mapeamento de atributos de usuário, analise os seguintes detalhes importantes.

  • Quando um usuário federado faz login em sua aplicação, deve haver um mapeamento para cada atributo que seu grupo de usuários exige. Por exemplo, se seu grupo de usuários exigir um atributo email para cadastro, mapeie esse atributo ao seu equivalente usando o IdP.

  • Por padrão, os endereços de e-mail mapeados não são verificados. Não é possível verificar um endereço de e-mail mapeado usando um código único. Em vez disso, mapeie um atributo usando o IdP para obter o status de verificação. Por exemplo, o Google e a maioria dos provedores de OIDC incluem o atributo email_verified.

  • É possível associar tokens do provedor de identidades (IdP) a atributos personalizados no grupo de usuários. Os provedores sociais apresentam um token de acesso e os provedores de OIDC apresentam um token de acesso e ID. Para associar um token, adicione um atributo personalizado com 2.048 caracteres, no máximo, conceda ao cliente da aplicação acesso de gravação ao atributo e associe access_token ou id_token do IdP ao atributo personalizado.

  • Para cada atributo mapeado do grupo de usuários, a extensão máxima do valor de 2.048 caracteres deve ser suficiente para o valor que o Amazon Cognito obtém do IdP. Caso contrário, o Amazon Cognito vai relatar um erro quando os usuários acessarem sua aplicação. O Amazon Cognito não comporta mapeamento de tokens de IdP a atributos personalizados quando os tokens têm mais de 2.048 caracteres.

  • O Amazon Cognito gera o atributo username no perfil de um usuário federado com base em reivindicações específicas transmitidas por seu IdP federado, conforme mostra a tabela a seguir. O Amazon Cognito anexa esse valor de atributo com o nome de seu IdP, por exemplo, MyOIDCIdP_[sub]. Quando você quiser que seus usuários federados tenham um atributo que corresponda exatamente a um atributo em seu diretório de usuários externo, mapeie esse atributo para um atributo de login do Amazon Cognito, como preferred_username.

    Provedor de identidades Atributo de origem username
    Facebook id
    Google sub
    Login with Amazon user_id
    Fazer login com a Apple sub
    Provedores SAML NameID
    Provedores OpenID Connect (OIDC) sub
  • Quando um grupo de usuários não diferencia maiúsculas de minúsculas, o Amazon Cognito converte o atributo de origem do nome de usuário em minúsculas nos nomes de usuário gerados automaticamente pelos usuários federados. Veja a seguir um exemplo de nome de usuário para um grupo de usuários que diferencia maiúsculas de minúsculas: MySAML_TestUser@example.com. A seguir, veja o mesmo nome de usuário para um grupo de usuários que não diferencia maiúsculas de minúsculas: MySAML_testuser@example.com.

    Em grupos de usuários que não diferenciam maiúsculas de minúsculas, seus acionadores do Lambda que processam o nome de usuário devem considerar essa modificação em qualquer reivindicação de maiúsculas e minúsculas para atributos de origem de nome de usuário. Para vincular seu IdP a um grupo de usuários que tenha uma configuração de diferenciação de maiúsculas e minúsculas diferente do grupo de usuários atual, crie um grupo de usuários.

  • O Amazon Cognito deve ser capaz de atualizar seus atributos mapeados do grupo de usuários quando os usuários fazem login na sua aplicação. Quando um usuário faz login por meio de um IdP, o Amazon Cognito atualiza os atributos mapeados com as informações mais recentes do IdP. O Amazon Cognito atualiza cada atributo mapeado, mesmo se o valor atual corresponder às informações mais recentes. Para garantir que o Amazon Cognito possa atualizar os atributos, verifique os seguintes requisitos:

    • Todos os atributos personalizados do grupo de usuários mapeados por meio do IdP devem ser mutáveis. É possível atualizar atributos personalizados mutáveis a qualquer momento. Entretanto, você só pode definir um valor para o atributo personalizado imutável ao criar o perfil de usuário pela primeira vez. Para criar um atributo personalizado mutável no console do Amazon Cognito, ative a caixa de seleção Mutable (Mutável) correspondente ao atributo adicionado ao selecionar Add custom attributes (Adicionar atributos personalizados) na guia Sign-up experience (Experiência de inscrição). Ou, se você criar o grupo de usuários com CreateUserPool usando a operação da API, você pode definir o Mutable parâmetro para cada um desses atributos true. Se seu IdP enviar um valor para um atributo imutável mapeado, o Amazon Cognito retornará um erro, e o login falhará.

    • Nas configurações do cliente de aplicativo para seu aplicativo, os atributos mapeados deve ser gravável. Você pode definir quais atributos são graváveis na página App clients (Clientes da aplicação) no console do Amazon Cognito. Ou, se você criar o aplicativo cliente usando a operação de API CreateUserPoolClient, você pode adicionar esses atributos à matriz WriteAttributes. Se o seu IdP enviar um valor para um atributo mapeado não gravável, o Amazon Cognito não definirá o valor do atributo e prosseguirá com a autenticação.

  • Quando os atributos de IdP contêm vários valores, o Amazon Cognito nivela todos os valores em uma única string delimitada por vírgula, e um URL codifica o formato dos valores que apresentam caracteres não alfanuméricos (exceto “.”, “-”, “*” e “_”). Você deve decodificar e analisar os valores individuais antes de usá-los em sua aplicação.

Como especificar mapeamentos de atributos do provedor de identidade para o grupo de usuários (AWS Management Console)

É possível usar o AWS Management Console para especificar mapeamentos de atributos para o IdP do grupo de usuários.

nota

O Amazon Cognito mapeará solicitações de entrada para atributos do grupo de usuários somente se as solicitações existirem no token de entrada. Se uma reivindicação mapeada anteriormente não existir mais no token de entrada, ela não será excluída ou alterada. Se sua aplicação exigir o mapeamento de declarações excluídas, é possível usar o acionador do Lambda de pré-autenticação para excluir o atributo personalizado durante a autenticação e permitir que esses atributos sejam preenchidos novamente com base no token de entrada.

Para especificar um mapeamento de atributo de IdP
  1. Faça login no console do Amazon Cognito. Se solicitado, insira suas credenciais da AWS.

  2. No painel de navegação, escolha User Pools (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

  3. Escolha a guia Sign-in experience (Experiência de login) e localize Federated sign-in (Acesso federado).

  4. Escolha Add an identity provider (Adicionar um provedor de identidade) ou escolha o IdP Facebook, Google, Amazon ou Apple que você configurou. Localize Attribute mapping (Mapeamento de atributos) e escolha Edit (Editar).

    Para obter mais informações sobre como adicionar um IdP social, consulte Como usar provedores de identidade social com um grupo de usuários.

  5. Conclua as seguintes etapas para cada atributo que precisar mapear:

    1. Escolha um atributo da coluna User pool attribute (Atributo do grupo de usuários). Esse é o atributo que será atribuído ao perfil de usuário no grupo de usuários. Os atributos personalizados são listados depois dos atributos padrão.

    2. Selecione um atributo da coluna <provider> attribute (atributo do <provedor>). Esse será o atributo transmitido do diretório do provedor. Atributos conhecidos do provedor social são fornecidos em uma lista suspensa.

    3. Para mapear atributos adicionais entre seu IdP e o Amazon Cognito, escolha Add another attribute (Adicionar outro atributo).

  6. Escolha Salvar alterações.

Para especificar um mapeamento de atributos do provedor SAML
  1. Faça login no console do Amazon Cognito. Se solicitado, insira suas credenciais da AWS.

  2. No painel de navegação, escolha User Pools (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

  3. Escolha a guia Sign-in experience (Experiência de login) e localize Federated sign-in (Acesso federado).

  4. Escolha Add an identity provider (Adicionar um provedor de identidade) ou escolha o IdP que você configurou. Localize Attribute mapping (Mapeamento de atributos) e escolha Edit (Editar). Para mais informações sobre como adicionar um IdP SAML, consulte Como usar provedores de identidade SAML com um grupo de usuários.

  5. Conclua as seguintes etapas para cada atributo que precisar mapear:

    1. Escolha um atributo da coluna User pool attribute (Atributo do grupo de usuários). Esse é o atributo que será atribuído ao perfil de usuário no grupo de usuários. Os atributos personalizados são listados depois dos atributos padrão.

    2. Selecione um atributo da coluna SAML attribute (Atributo SAML). Esse será o atributo transmitido do diretório do provedor.

      Seu IdP pode oferecer exemplos de declarações SAML como referência. Alguns IdPs usam nomes simples, como email, enquanto outros usam nomes de atributos formatados com URL, semelhantes a:

      http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
    3. Para mapear atributos adicionais entre seu IdP e o Amazon Cognito, escolha Add another attribute (Adicionar outro atributo).

  6. Escolha Salvar alterações.

Como especificar mapeamentos de atributos de provedor de identidade para seu grupo de usuários (AWS CLI e API da AWS)

O corpo da solicitação a seguir para CreateIdentityProvider ou UpdateIdentityProvider mapeia os atributos “MyIdp” emailaddress, birthdate e phone do provedor SAML para os atributos do grupo de usuários email, birthdate e phone_number, nessa ordem. Esse é um corpo de solicitação completo para um provedor de SAML 2.0. Seu corpo de solicitação pode variar dependendo do tipo de IdP e dos detalhes específicos. O mapeamento de atributos está no parâmetro AttributeMapping.

{ "AttributeMapping": { "email" : "emailaddress", "birthdate" : "birthdate", "phone_number" : "phone" }, "IdpIdentifiers": [ "IdP1", "pdxsaml" ], "ProviderDetails": { "IDPInit": "true", "IDPSignout": "true", "EncryptedResponses" : "true", "MetadataURL": "https://auth.example.com/sso/saml/metadata", "RequestSigningAlgorithm": "rsa-sha256" }, "ProviderName": "MyIdP", "ProviderType": "SAML", "UserPoolId": "us-west-2_EXAMPLE" }

Use os comandos a seguir para especificar os mapeamentos de atributos do IdP para o grupo de usuários.

Para especificar mapeamentos de atributos no momento da criação do provedor
  • AWS CLI: aws cognito-idp create-identity-provider

    Exemplo com arquivo de metadados: aws cognito-idp create-identity-provider --user-pool-id <user_pool_id> --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

    Onde details.json contém:

    { "MetadataFile": "<SAML metadata XML>" }
    nota

    Se <SAML metadata XML> contiver cotações ("), elas deverão ser precedidas por (\").

    Exemplo com URL de metadados:

    aws cognito-idp create-identity-provider \ --user-pool-id us-east-1_EXAMPLE \ --provider-name=SAML_provider_1 \ --provider-type SAML \ --provider-details MetadataURL=https://myidp.example.com/saml/metadata \ --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  • API/SDK: CreateIdentityProvider

Para especificar mapeamentos de atributos para um IdP existente
  • AWS CLI: aws cognito-idp update-identity-provider

    Example: aws cognito-idp update-identity-provider --user-pool-id <user_pool_id> --provider-name <provider_name> --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

  • API/SDK: UpdateIdentityProvider

Para obter informações sobre o mapeamento de atributos para determinado IdP
  • AWS CLI: aws cognito-idp describe-identity-provider

    Example: aws cognito-idp describe-identity-provider --user-pool-id <user_pool_id> --provider-name <provider_name>

  • API/SDK: DescribeIdentityProvider