82 votes

Comment devenir un fournisseur de services SAML

Bonjour À Tous,

Ma société développe actuellement une application web Java. Un couple de nos clients internes SAML serveurs (fournisseurs d'identité?) et ont de nous demander d'intégrer avec eux. Ainsi, récemment, j'ai lu sur elle et jouer avec OpenAM. Après environ 3 jours de cela, j'ai une compréhension générale, mais il ya encore quelques lacunes dans mes connaissances. Mon espoir est que quelqu'un peut éclaircir ce point pour moi.

Alors, voici comment j'imagine le flux de travail d'un utilisateur connecté. Nous allons définir nos clients SAML serveur en tant que https://their.samlserver.com. De sorte qu'un utilisateur vient à notre application web pour une ressource qui est protégé. Disons que l'URL est http://my.app.com/something. Donc, si je suis correct, "my.app.com" est ce que SAML définit comme un "Fournisseur de Services". Notre application se rend compte que cet utilisateur doit ouvrir une session. Nous présentons ensuite une page de ce genre pour l'utilisateur...

<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
    <input type="hidden" name="SAMLRequest" value="someBase64Data" />
    <input type="submit" value="Submit" />
</form>

Et que someBase64Data doivent être encodées en base64 version de ce...

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="identifier_1"
  Version="2.0"
  IssueInstant="2004-12-05T09:21:59Z"
  AssertionConsumerServiceIndex="0">
 <saml:Issuer>http://my.app.com</saml:Issuer>
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>

Donc, mon premier couple de questions. Qu'est-ce que le "ID" de la valeur suppose d'être? Et pourquoi ne puis-je me déclarer comme un "Émetteur"? Le Fournisseur d'Identité à savoir sur moi? C'est peut-être que le "Cercle de confiance" j'ai été voir sur OpenAM. Et si il le fait savoir sur moi, comment fait-il savoir à propos de moi et qu'est-il besoin de savoir?

Donc, une fois que l'utilisateur est transmis cette page, ils sont pris à une page fournie par l'IDP https://their.samlserver.com. Ils s'authentifier sur cette page et de l'IDP est-il de la magie pour valider l'authentification et de rechercher l'utilisateur. Après la réussite de l'authentification, de l'IDP envoie en retour un <samlp:Response> défini ici.

Un peu plus de questions. Tout d'abord, comment l' <samlp:Response> revenir à mon application web afin que je puisse vérifier? Et que dois-je être à la recherche dans cette réponse, afin de valider qu'il a réussi? Ce n'est un échec?

Nous utilisons actuellement adresse e-mail (LDAP) pour identifier les utilisateurs, de sorte que nous allons probablement saisir qu'à partir de la réponse et de l'utiliser de la même manière que nous le faisons maintenant. Autre chose que je devrais être attentif dans cette réponse?

Alors, maintenant que nous avons vérifié que la réponse de validité, nous pouvons accorder à l'utilisateur d'une session comme nous le faisons actuellement. Mais quand ils veulent pour vous déconnecter, il y a un flux de travail pour qui? Dois-je informer de l'IDP, que l'utilisateur a quitté?

Et enfin, il y a un couple de sujets qui ont été jetés dans ma lecture et je ne suis pas sûr de savoir comment ils s'insèrent dans ce flux de travail. Ils sont "Cercle de confiance", "Jetons", et des "Artefacts".

Merci pour toute aide tout le monde. J'ai trouvé beaucoup d'informations dans les deux derniers jours, et il est possible que j'ai pu les reconstituer après un peu plus de jeu. Mais je n'ai pas encore trouver d'un simple "Voici le Post" flux de travail article encore. Peut-être que c'est parce que je me trompe sur la façon dont cela fonctionne. C'est peut-être parce que ce n'est pas que populaire encore. Mais je voulais vraiment vous assurer que j'ai eu le flux de travail donc je n'ai pas manqué une étape cruciale dans quelque chose d'aussi important que l'authentification de l'utilisateur.

46voto

Scott T. Points 2410

En réponse à vos questions spécifiques:

1.) Qu'est-ce que le "ID" de la valeur censé être?

  • Ce doit être un identificateur unique pour la requête SAML. Le SAML 2.0 spécification stipule que c'est vraiment de la mise en œuvre spécifique de la façon dont c'est fait, mais fait les recommandations suivantes: "Le mécanisme par lequel un SAML entité système garantit que l'identifiant est unique, c'est à gauche à la mise en œuvre. Dans le cas d'un échantillon aléatoire ou pseudo-aléatoire est la technique employée, la probabilité que deux choisis au hasard, les identificateurs identiques DOIT être inférieur ou égal à 2 ^ -128 et DOIT être inférieur ou égal à 2 ^-160 dans la longueur. Cette exigence PEUT être satisfaite par un encodage choisis au hasard valeur comprise entre 128 et 160 bits de longueur."

2.) Comment l'IdP savoir sur vous?

  • Votre SP doit être enregistré auprès de l'IdP. Pour ce faire, le SAML spécification définit un format de "SAML Métadonnées", qui raconte l'IdP où votre SAML récepteurs, ce que vos certificats, des attributs exchange, etc. OpenAM probablement dicte certaines exigences minimales pour la configuration d'un de confiance SP. Cela varie en fonction de chaque produit.

3.) Où est la Réponse de l'aller, et ce qu'il faut vérifier?

  • La Réponse sera envoyée à votre Affirmation Service Consommateurs URL généralement définis dans le protocole SAML Métadonnées qui vous change de votre SP avec l'IdP de la configuration initiale. Lorsque vous recevez une Réponse SAML, vous devez vérifier beaucoup de choses - mais plus important encore, la SAML code de Statut doit être "succès", le inResponseTo ID doit correspondre à la demande est envoyée et vous devez valider la signature numérique sur l'Affirmation. Pour cela, vous aurez besoin de la confiance de l'IdP publique du certificat de vérification, et vous voudrez aussi de faire la vérification de la révocation.

4.) Ce sujet de Déconnexion?

  • SAML 2.0 définit également un profil Déconnexion Unique (SLO). Ce ne sera pas seulement la session de la SP, mais aussi de l'IdP, et potentiellement tout autre SP de la vous avez établi une sesssion avec. Il a une semblable requête/réponse flux de l'authentification Unique (SSO), et donc des choses similaires à l'installation et vérifier (codes d'état, des signatures, etc.).

Donc en bref, ce qui peut être assez complexe à mettre en œuvre à partir de zéro. Il est préférable d'utiliser des vrais bibliothèques et/ou des produits comme Ian suggère. Les entreprises comme la sienne ont investi des centaines d'heures de développement, de temps à mettre en œuvre en fonction de la spécification et de test d'interopérabilité avec d'autres fournisseurs.

4voto

Ian Points 2036

Nous (Ping Identity) ont une assez longue liste de Fournisseurs de Services (130+) à l'aide de notre logiciel afin de fournir SAML1.x/2.0 et WS-Federation SSO capacités de leurs clients. Voici un lien où vous pouvez voir une partie de nos Partenaires à ce jour --

Toutefois, s'agissant des flux d'informations en détails, si vous découvrez notre Guide de prise en main , nous avons une section entière sur les normes de nous soutenir et de flux de détails pour chacun d'eux (par exemple, SP-Init SSO POST/POST). Qui seront probablement les informations que vous recherchez. Aussi, le SAML spec lui-même a tout à fait un peu de détail dans le SAML 2.0 vue d'ensemble Technique de document OASIS produit.

Espérons que cela aide - Ian

3voto

user538917 Points 21

Si vous êtes juste essayer de définir une seule application Java comme un Fournisseur de Services, vous devriez envisager d'utiliser un Fedlet soit à partir d' Oracle (autonome ) ou ForgeRock ( livré avec OpenAM ). Le ForgeRock Fedlet a des problèmes en interaction avec Shibboleth 2.2.1 tant que Fournisseur d'Identité, mais je trouve que c'est un peu plus simple à configurer et plus informatif.

Chacun a des instructions contenues dans le fichier README pour vous aider à déployer. Une fois le Fedlet est configuré et communiquer avec le pci, le succès de la page vous indique tous les code que vous devez intégrer SSO fédéré dans votre application. Il fait le travail de fond de l'envoi et la réception AuthnRequests et les Réponses.

Scott réponse répond assez bien aux questions que vous avez eu, mais je pense qu'essayer d'écrire du code sur votre propre qui génère le SAML est de réinventer la roue. Le Fedlet a été conçu précisément à ce cas d'utilisation à l'esprit.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X