Provedores de identidade SAML (grupos de identidades)
O Amazon Cognito é compatível com autenticação com provedores de identidade (IdPs) por meio do Security Assertion Markup Language 2.0 (SAML 2.0). No Amazon Cognito, é possível usar um IdP compatível com SAML para fornecer um fluxo simples de integração aos usuários. Seu IdP compatível com SAML especifica as funções do IAM que seus usuários podem assumir. Dessa forma, diferentes usuários podem receber diferentes conjuntos de permissões.
Como configurar seu grupo de identidades para um IdP SAML
As etapas a seguir descrevem como configurar o grupo de identidades para usar um IdP baseado em SAML.
nota
Antes de configurar o grupo de identidades para ser compatível com um provedor SAML, primeiro configure o IdP SAML no console do IAM
Para configurar o grupo de identidades para ser compatível com um provedor SAML
-
Faça login no console do Amazon Cognito
, escolha Manage Identity Pools (Gerenciar identidades federadas) e Create new identity pool (Criar novo grupo de identidades). -
Na seção Authentication providers (Provedores de autenticação), selecione a guia SAML.
-
Escolha o ARN do provedor SAML e, em seguida, Create Pool (Criar grupo).
Como configurar seu IdP SAML
Depois de criar o provedor SAML, configure o IdP SAML para adicionar uma confiança de terceira parte confiável entre o IdP e a AWS. Vários IdPs permitem que você especifique um URL que eles possam usar para ler informações sobre a terceira parte confiável e certificados de um documento XML. Para AWS, use https://signin.aws.amazon.com/static/saml-metadata.xml
Como personalizar a função do usuário com SAML
Ao usar o SAML com a identidade do Amazon Cognito, você pode personalizar a função para o usuário final. O Amazon Cognito só aceita o fluxo avançado com o IdP baseado em SAML. Não é necessário especificar uma função autenticada ou não autenticada para o grupo de identidades para usar um IdP com base em SAML. O atributo de reivindicação https://aws.amazon.com/SAML/Attributes/Role
especifica um ou mais pares de ARN de provedor e função delimitados por vírgulas. Essas são as funções que o usuário pode assumir. Você pode configurar o IdP SAML para preencher os atributos de função com base nas informações do atributo de usuário disponíveis no IdP. Se você receber várias funções na declaração SAML, preencha o parâmetro customRoleArn
opcional ao chamar getCredentialsForIdentity
. O usuário assumirá esse customRoleArn
se a função corresponder a uma função na declaração SAML.
Como autenticar usuários com um IdP SAML
Para federar com o IdP baseado em SAML, determine o URL onde o usuário inicia o login. A federação da AWS usa login iniciado pelo IdP. No AD FS 2.0 o URL tem a forma de https://
.<fqdn>
/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices
Para adicionar compatibilidade com IdP SAML no Amazon Cognito, primeiro autentique os usuários com o provedor de identidade SAML do aplicativo iOS ou Android. O código que você usa para integrar e autenticar com o IdP SAML é específico para os provedores SAML. Assim que autenticar o usuário, você poderá usar APIs do Amazon Cognito para fornecer a declaração SAML resultante à identidade do Amazon Cognito.
Você não pode repetir nem reproduzir uma declaração SAML no mapa Logins
da sua solicitação de API de grupo de identidades. Uma declaração SAML reproduzida tem um ID de declaração que duplica o ID de uma resposta anterior da API. As operações de API que podem aceitar uma declaração SAML no mapa Logins
incluem GetId, GetCredentialsForIdentity, GetOpenIdToken e GetOpenIDTokenForDeveloperIdentity. Você pode reproduzir um ID de declaração SAML uma vez por solicitação de API em um fluxo de autenticação de grupo de identidades. Por exemplo, você pode fornecer a mesma declaração SAML em uma solicitação GetId
e em uma solicitação GetCredentialsForIdentity
subsequente, mas não em uma segunda solicitação GetId
.
Android
Se você usar o SDK do Android, será possível preencher o mapa de logins com a declaração do SAML da forma a seguir.
Map logins = new HashMap(); logins.put("arn:aws:iam::aws account id:saml-provider/name", "base64 encoded assertion response"); // Now this should be set to CognitoCachingCredentialsProvider object. CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(context, identity pool id, region); credentialsProvider.setLogins(logins); // If SAML assertion contains multiple roles, resolve the role by setting the custom role credentialsProvider.setCustomRoleArn("arn:aws:iam::aws account id:role/customRoleName"); // This should trigger a call to the Amazon Cognito service to get the credentials. credentialsProvider.getCredentials();
iOS
Caso esteja usando o SDK do iOS, é possível fornecer a declaração do SAML em AWSIdentityProviderManager
da forma a seguir.
- (AWSTask<NSDictionary<NSString*,NSString*> *> *) logins { //this is hardcoded for simplicity, normally you would asynchronously go to your SAML provider //get the assertion and return the logins map using a AWSTaskCompletionSource return [AWSTask taskWithResult:@{@"arn:aws:iam::aws account id:saml-provider/name":@"base64 encoded assertion response"}]; } // If SAML assertion contains multiple roles, resolve the role by setting the custom role. // Implementing this is optional if there is only one role. - (NSString *)customRoleArn { return @"arn:aws:iam::accountId:role/customRoleName"; }