Chapitre 15. SSO (Single Sign On) dans SAML

15.1. Security Token Service (STS)

Le service de jetons de sécurité (STS) génère et gère des jetons de sécurité. Il ne crée pas de jetons de type particulier. À la place, il définit des interfaces génériques qui autorisent l'ajout de multiples fournisseurs de jetons. De ce fait, il peut être configuré pour gérer plusieurs types de jetons, dans la mesure où un fournisseur de jetons existe pour chaque type de token. Il spécifie également le format de la requête de jeton de sécurité et les messages réponse.
Un message STS indique :
  • Type de requête, Issue, Renew, etc.
  • Type de jeton
  • Durée de vie du jeton donné
  • Informations sur le fournisseur de services qui a demandé le jeton
  • Informations utilisées pour crypter le jeton créé.

Note

Support aux tokens PKCS#11 ajouté à JBoss EAP à partir de la version 6.3.0.
Les domaines de sécurité EAP peuvent accepter les clés PKCS#11 et les définitions de trust stores en adoptant l'attribut provider. La valeur spécifiée est passée aux appels KeyStore.getInstance("PKCS11") pertinents; la clé et le key store sont initialisés.
La configuration de ce nouveau support n'entre pas dans le cadre de la documentation EAP. Les utilisateurs qui souhaitent utiliser cette fonction doivent se familiariser avec l'installation du matériel et des logiciels PKCS #11, ainsi que les entrées correctes nécessaires au fichier de stratégie java.security. Le document Oracle Java PKCs #11 Guide de référence peut être une ressource utile d'information à ce sujet.
Le message de demande de jeton est envoyé dans le corps du message SOAP. Toutes les informations liées à la demande de jeton sont contenues dans l'élément RequestSecurityToken. L'exemple de requête contient deux autres éléments WS-Trust : RequestType qui précise que cette requête est une requête d'émission et TokenType qui spécifie le type du jeton qui sera attribué.
Voici un exemple de message de requête WS-Trust.

Exemple 15.1. Message de requête de jeton de sécurité WS-Trust

<S11:Envelope xmlns:S11=".." xmlns:wsu=".." xmlns:wst="..">  
   <S11:Header>  
      ...  
   </S11:Header>  
   <S11:Body wsu:Id="body">  
      <wst:RequestSecurityToken Context="context">  
         <wst:TokenType>http://www.tokens.org/SpecialToken</wst:TokenType>  
         <wst:RequestType>  
            http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue  
         </wst:RequestType>  
      </wst:RequestSecurityToken>  
   </S11:Body>  
</S11:Envelope>
Voici un exemple de réponse de jeton de sécurité.

Exemple 15.2. Message de réponse de jeton de sécurité

    <wst:RequestSecurityTokenResponse Context="context" xmlns:wst=".." xmlns:wsu="..">  
       <wst:TokenType>http://www.tokens.org/SpecialToken</wst:TokenType>  
       <wst:RequestedSecurityToken>  
          <token:SpecialToken xmlns:token="...">  
             ARhjefhE2FEjneovi&@FHfeoveq3  
          </token:SpecialToken>  
       </wst:RequestedSecurityToken>  
       <wst:Lifetime>  
          <wsu:Created>...</wsu:Created>  
          <wsu:Expires>...</wsu:Expires>  
       </wst:Lifetime>  
    </wst:RequestSecurityTokenResponse>
Dans l'exemple de réponse de jeton de sécurité, l'élément TokenType spécifie le type du jeton émis, alors que l'élément RequestedSecurityToken contient le jeton lui-même. Le format du jeton dépend du type du jeton. L'élément de Lifetime spécifie quand le jeton a été créé et quand il expire.
Traitement de la requête de jeton de sécurité

Voici les étapes de traitement d'une requête de jeton de sécurité :

  • Un client envoie une requête de jeton de sécurité à PicketLinkSTS.
  • PicketLinkSTS analyse le message de requête, et génère un modèle d'objet JAXB.
  • PicketLinkSTS lit le fichier de configuration et crée l'objet STSConfiguration, si nécessaire. Ensuite, il obtient une référence au WSTrustRequestHandler de la configuration et délègue le traitement de la requête à l'instance du gestionnaire de la demande.
  • Le gestionnaire de requêtes utilise STSConfiguration pour définir les valeurs par défaut si nécessaire (par exemple, lorsque la demande ne spécifie pas une valeur de durée de vie de jeton)
  • Le WSTrustRequestHandler crée un WSTrustRequestContext, définissant l'objet de la requête JAXB et le principal de l'appelant reçu de PicketLinkSTS.
  • Le WSTrustRequestHandler utilise la STSConfiguration pour obtenir le SecurityTokenProvider qui doit être utilisé pour traiter la requête selon le type du jeton qui est demandé. Ensuite, il appelle le fournisseur, en passant le WSTrustRequestContext en tant que paramètre.
  • L'instance SecurityTokenProvider traite la demande de jeton et stocke le jeton à produire dans le contexte de demande.
  • Le WSTrustRequestHandler obtient le jeton du contexte, le crypte si nécessaire, et construit l'objet de réponse WS-Trust contenu dans le jeton de sécurité.
  • PicketLinkSTS dicte la réponse générée par le gestionnaire de requêtes et la renvoie au client.