C'est une question intéressante que vous avez posée. Je sais que pour une raison quelconque, Microsoft a mis en place ce framework "Windows Identity Foundation" sans beaucoup de documentation. Je le sais parce que j'ai été chargé de trouver comment l'utiliser avec un nouveau projet et l'intégrer à l'infrastructure existante. J'ai cherché sur le web pendant des mois à la recherche de bonnes informations. J'ai pris un angle un peu différent pour résoudre le problème que vous décrivez.
J'ai pris une application de connexion existante et y ai intégré la plomberie WIF de Microsoft. Par cela, je veux dire que j'ai une application où un utilisateur se connecte. L'application de connexion soumet les informations d'identification fournies par l'utilisateur à un autre serveur qui retourne l'identité des utilisateurs (ou indique un échec de connexion).
regardant quelques-uns des exemples de Microsoft, je vois qu'ils font ce qui suit: construire un SignInRequestMessage
d'un querystring (généré par une application de partie utilisatrice), construire un service de jeton de sécurité d'une classe personnalisée, et enfin appeler FederatedSecurityTokenServiceOperations. ProcessSignInresponse avec l'actuel httpcontext.response. Malheureusement, je ne peux pas vraiment l'expliquer bien ici; vous avez vraiment besoin de regarder les exemples de code.
Une partie de mon code est très similaire à l'exemple de code. Où vous allez être intéressé par la mise en œuvre de beaucoup de votre propre logique est dans le GetOutputClaimsIdentity
. C'est la fonction qui construit l'identité de revendications qui décrit l'utilisateur connecté. Maintenant, voici ce que je pense que vous êtes vraiment intéressé à savoir. C'est ce que Microsoft ne vous dit pas dans leur documentation, AFAIK. Une fois que l'utilisateur se connecte, il est redirigé vers l'application de la partie de confiance. Quel que soit le mode de fonctionnement de l'application de connexion, les classes WIF envoient une réponse au navigateur de l'utilisateur contenant une entrée HTML "cachée" contenant le certificat de signature de jeton et les revendications de l'utilisateur. (Les revendications seront en texte clair). À la fin de cette réponse est une redirection vers votre site Web de confiance.Je ne sais rien de cette action parce que je l'ai capturé avec "Fiddler"
Une fois de retour sur le site Web de la partie de confiance, les classes WIF géreront la réponse (avant que votre code ne soit exécuté). Le certificat sera validé. Par défaut, si vous avez configuré le site Web de votre partenaire de confiance avec FedUtil.exe (en cliquant sur "Ajouter une référence STS dans votre application de partie de confiance de Visual Studio), la classe de Microsoft vérifie l'empreinte du certificat."
Cadre WIF définit les cookies dans le navigateur de l'utilisateur (Dans mon expérience, les noms de cookies commencent avec "FedAuth") qui contiennent les revendications des utilisateurs.Les cookies ne sont pas lisibles par l'homme
Une fois que cela se produit, vous pouvez éventuellement effectuer des opérations sur les revendications de l'utilisateur sur le site Web de la partie utilisatrice à l'aide du code ClaimsAuthenticationClass
.C'est où votre code est en cours d'exécution.
Je sais que c'est différent de ce que vous décrivez, mais j'ai cette configuration qui fonctionne. J'espère que ça aide!
ps. S'il vous plaît vérifier les autres questions que j'ai posées à propos de Windows Identity Foundation.
MISE À JOUR: Pour répondre à la question dans le commentaire ci-dessous:
Une chose que je me suis permis est que la redirection vers le STS log sur l'application arrive par le biais d'une redirection avec une chaîne de requête contenant l'URL l'application à laquelle l'utilisateur se connecte. Cette redirection se produit automatiquement la première fois qu'un utilisateur tente d'accéder à une page nécessitant une authentification. Alternativement, je crois que vous pourriez faire la redirection manuellement avec le module WSFederationAuthentication
.
Je ne l'ai jamais essayé de le faire, mais si vous souhaitez utiliser un journal sur la page dans l'application elle-même, je crois que le cadre devrait vous permettre d'utiliser les éléments suivants:
1) encapsulent votre STS code dans une bibliothèque. 2) Référencez la bibliothèque de votre application. 3) Créez une page de connexion dans votre application. Assurez-vous que cette page ne nécessite pas d'authentification. 4) Définissez la propriété issuer de l'élément wsFederation
dans la section Microsoft.IdentityModel
de votre web.config sur la page de connexion.
merci Eugenio, je pensais que j'avais lu le Guide d'Identité des Réclamations, évidemment pas parce que j'ai manqué que Fabrikam était une application MVC. Je vais être sûr d'y jeter un coup d'oeil. J'ai aussi jeté un œil sur le blog de Dominick Baier et je pense que faire un appel à un serveur actif depuis le serveur web sur la page de connexion est finalement ce que je cherche. –
Je ne vois pas que l'utilisation de WIF dans ASP.net MVC est différente de celle des formulaires ASP.net. –
Les principes sont exactement les mêmes. Il y a juste quelques détails d'implémentation. Les différences les plus courantes sont: -Dans une application Webforms, vous utilisez généralement WIF pour tous les échanges de protocole (passiveRedirectEnable = true). Dans une application MVC, vous allez désactiver cela et gérer cela par programme comme expliqué dans mon blog. - Dans une application MVC, vous implémentez généralement un attribut IAuthorizationFilter. Dans les formulaires Web, cela n'existe pas et vous dépendez simplement du mécanisme d'autorisation ASP.NET existant (ou appelez IsInRole, etc.) –