web-dev-qa-db-fra.com

Comment dois-je implémenter SAMLP 2.0 dans un fournisseur de services ASP.NET MVC 4?

Je développe une application Web MVC 4 en C # et souhaite gérer la connexion à l'aide d'un fournisseur d'identité SAML 2.0 existant. J'utilise HTTP POST avec SimpleSAMLphp .

Il semble que, dans .NET 4.5, je devrais utiliser Windows Identity Foundation. Tout d'abord, j'ai essayé d'installer Identity and Access Tool . (J'utilise Visual Studio 2013, qui est censé avoir cet outil intégré, mais la version de VS2013 ne prend pas en charge la "rentrée" , ce qui signifie que je ne peux pas l'utiliser pour ajouter la prise en charge WIF à mon application existante.)

Après avoir pointé l'outil d'identité et d'accès vers les métadonnées de mon fournisseur d'identité, je reçois ce message d'erreur:

userSelection.SecurityTokenServiceMetadata.SecurityTokenServiceDescriptor

Apparemment, c'est le message d'erreur qui indique que SAMLP 2.0 n'est pas pris en charge par WIF. Cela semble différent de SAML 2.0 tokens, qui sont pris en charge (au moins, ceci documentation obsolète indique qu'il y avait un Microsoft.IdentityModel.Tokens.Saml2 espace de noms).

J'ai ensuite découvert le Extension WIF pour SAML 2.. Cependant, cela a été publié en mai 2011 et ne semble pas avoir été touché depuis lors. Néanmoins, j'ai téléchargé l'extension et tenté de construire le SamlConfigTool inclus dans le fichier Zip. L'outil est une application console qui m'informe que:

Cet outil vous demandera les informations nécessaires pour créer un fichier de métadonnées qui décrit votre partie de confiance. Il demandera les adresses des fichiers de métadonnées partenaires à télécharger. Enfin, il affichera un fichier appelé Changes_To_Web_Config.xml qui contient les modifications à apporter au fichier web.config de votre site Web pour activer la protection SAML.

Après avoir entré mon ID d'entité et mon point de terminaison SAML, SamlConfigTool s'est rapidement écrasé. D'accord, je n'ai peut-être pas besoin d'utiliser l'outil de configuration et je peux simplement copier ce qui est fait dans l'exemple de projet ServiceProvider VS. Après la migration, je peux ouvrir le projet dans VS2012, mais je ne sais pas exactement comment cela fonctionne - il ne semble pas contenir de code C #, juste de nouvelles entrées dans Web.config. Je ne sais pas comment adapter cette configuration pour remplacer le code de connexion personnalisé dans mon application MVC 4, et en tout cas, s'appuyer sur une bibliothèque morte d'il y a 3 ans ne semble pas être une excellente idée.

Alors, quelle est la meilleure façon d'implémenter SAML 2.0 dans ASP.NET MVC 4 ? Je suis en train de décoder, encoder, analyser et compresser XML à la main et il semble qu'il devrait y avoir un moyen plus simple.

20
sjy

Vous avez raison dans ce WIF (maintenant déplacé dans le noyau .NET sous System.IdentityModel) ne prend en charge que les jetons SAML2 et non les protocoles SAML2 requis mettre en œuvre un fournisseur de services.

Kentor.AuthServices est un open source SP implémentation pour ASP.NET MVC construit au-dessus de .NET 4.5. Installez le package et ajoutez des paramètres dans web.config - aucun codage requis.

Avertissement: je suis l'auteur de Kentor.AuthServices

17
Anders Abel

Pour autant que je sache, il n'y a pas encore de support pour SAML2P dans WIF. Je vous suggère de le mettre en œuvre vous-même.

Vous pouvez utiliser une bibliothèque qui implémente SAML2P et l'utiliser dans votre projet MVC. Certaines des bibliothèques que vous pourriez utiliser sont OIOSAML.NET ou commerciales ComponentPro SAML .

Ou il existe une option pour définir un IAM intermédiaire. À partir de MVC, vous définissez le fournisseur d'idénéité comme cet IAM intermédiaire en utilisant le protocole ws- * (méthode standard implémentée dans Visual Studio). Cet IAM doit être configuré pour relayer vos messages d'authentification à l'IDP que vous souhaitez utiliser avec SAML2P. Après l'authentification de l'utilisateur, l'IAM ne ferait que transformer les revendications et émettrait un nouveau jeton que votre application MVC approuve. Essayez de regarder Shibboleth ou ThinkTecture IdentityServer v2 (mais le second n'implémente pas SAML2P, vous devrez donc ajouter le support vous-même). Ou vous pouvez utiliser ADFS2.

3
pepo

Que diriez-vous http://www.nuget.org/packages/SAML2/ ? Il dit que c'est un fork de OIOSAML.NET .

2
Matt Kocaj

Vous avez besoin d'une bibliothèque, sauf si vous voulez l'écrire vous-même. J'ai travaillé avec https://www.nuget.org/packages/ITfoxtec.Saml2.Mvc .

1
edson-