SAML IDP on AWS

Génération des metadata du SP

samltest.id

Cependant les limites de Cognito sont de 128 caracteres par attribut SAML

J’ai donc du limiter les formats de NameID

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EntityDescriptor entityID="urn:amazon:cognito:sp:eu-west-1_xxxxxxx" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
    <SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
        <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
        <AssertionConsumerService index="0" isDefault="false" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://xxxxxxxxx.auth.eu-west-1.amazoncognito.com/saml2/idpresponse"/>
    </SPSSODescriptor>
</EntityDescriptor>

L’IDP a choisi le format persistent qui fait bien moins de 128 caractères

Scope Oauth

Recuperation d’un jeton JWT

https://<domain>.auth.eu-west-1.amazoncognito.com/login?response_type=token&client_id=<client_id>&redirect_uri=https://localhost/callback&
https://localhost/callback#id_token=<id_token>&access_token=<accesstoken>&expires_in=3600&token_type=Bearer

On obtient ainsi :

  • id token qui identifie l’utilisateur (obtenu seulement sur un scope openid)
  • access token qui donne seulement accès à une ressource sans identifier l’utilisateur

Les deux sont encodés en base64 et peuvent être facilement décodés sur https://jwt.io/