Question

Y a-t-il des exemples dignes de la disposition suivante:

Recherche par la WIF SDK , il y a des exemples d'utilisation WIF conjointement avec ASP.NET à l'aide du WSFederationAuthenticationModule (FAM) pour rediriger vers un site ASP.NET peau fine sur un service de jeton de sécurité (STS) qui utilise de l'utilisateur pour authentifier (via la fourniture d'un nom d'utilisateur et mot de passe).

Si je comprends WIF et correctement accès basé sur les revendications, je voudrais ma demande de fournir son propre écran de connexion où les utilisateurs fournissent leur nom d'utilisateur et mot de passe et de laisser ce délégué à un STS pour l'authentification, l'envoi des informations de connexion à un point final via une norme de sécurité (WS- *), et attend un SAML jeton à retourner. Idéalement, le SessionAuthenticationModule fonctionnerait selon les exemples en utilisant FAM conjointement avec SessionAuthenticationModule dire responsable de la reconstruction de la IClaimsPrincipal de la sécurité de session morcelées cookie et redirection vers ma page de connexion de l'application lors de la session de sécurité arrive à expiration.

Est-ce que je décris possible en utilisant FAM et SessionAuthenticationModule avec les paramètres appropriés web.config, ou dois-je penser à écrire un HttpModule moi-même pour gérer cette situation? Vous pouvez également redirigeant vers un site Web où les utilisateurs minces STS se connectent l'approche de facto dans un scénario de passif demandeur?

Était-ce utile?

La solution

Un exemple de WIF + MVC est disponible dans ce chapitre du « Guide des revendications d'identité »:

http://msdn.microsoft.com/en-us/library /ff359105.aspx

Je ne vous suggère de lire les premiers chapitres de couple pour comprendre tous les principes sous-jacents. Ce blog couvre les détails de MVC + WIF:

http://blogs.msdn.com/b/eugeniop/archive/2010/04/03/wif-and-mvc-how-it-works.aspx

Le contrôle de l'expérience de connexion est parfaitement bien. Vous devez simplement déployer vos propres STS (dans votre domaine, votre look & feel, etc). Vos applications seraient tout simplement compter sur elle pour AuthN (c'est pourquoi une application est généralement appelé « partie se fiant »).

L'avantage de l'architecture est que authN est déléguée à 1 composant (STS) et non répartis dans de nombreuses applications. Mais l'autre (énorme) avantage est que vous pouvez activer des scénarios plus sophistiqués très facilement. Par exemple, vous pouvez maintenant avec d'autres les fédérer fournisseurs d'identité de l'organisation.

it helps Eugenio

@RisingStar:

Le jeton (contenant revendications) peut éventuellement être chiffré (sinon ils seront en clair). C'est pourquoi SSL est toujours recommandé pour les interactions entre le navigateur et le STS.

Notez que même si elles sont en clair, la falsification est impossible, car le jeton est signé numériquement.

Autres conseils

C'est que vous avez posé une question intéressante. Je sais que, pour une raison quelconque, Microsoft a mis ce cadre « Windows Identity Foundation » sans beaucoup de documentation. Je sais que cela parce que je l'ai été chargé de déterminer comment l'utiliser avec un nouveau projet et son intégration avec l'infrastructure existante. J'ai recherche sur le Web pendant des mois à la recherche d'une bonne information.

J'ai pris un angle quelque peu différent pour résoudre le problème que vous décrivez.

Je pris un journal sur l'application existante et intégrée de plomberie WIF de Microsoft en elle. Par cela, je veux dire que j'ai une application où un utilisateur se connecte. Le journal sur soumet l'application des informations d'identification fournies par l'utilisateur à un autre serveur qui retourne l'identité des utilisateurs (ou indique log-en cas d'échec).

En regardant certains 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 le httpcontext.response actuel. Malheureusement, je ne peux pas vraiment l'expliquer bien ici; vous avez vraiment besoin de regarder les exemples de code.

Certains de mon code est très similaire à l'exemple de code. Où vous allez être intéressé par la mise en œuvre beaucoup de votre propre logique est dans le GetOutputClaimsIdentity. Ceci est la fonction qui construit des revendications identité qui décrit l'utilisateur connecté.

Maintenant, voici ce que je pense que vous êtes vraiment intéressé à connaître. C'est ce que Microsoft ne vous dit pas dans leur documentation, autant que je sache.

Une fois que l'utilisateur se connecte, ils sont redirigés vers l'application de partie utilisatrice. Quelle que soit la façon dont le journal sur les travaux d'application, les classes WIF enverra une réponse au navigateur de l'utilisateur qui contient une entrée HTML « caché » qui contient le certificat de signature de jetons et les demandes de l'utilisateur. (Les demandes seront en clair). A la fin de cette réponse est une redirection vers votre site Web reposant parti. Je ne sais sur cette action parce que j'emparèrent avec « Fiddler »

Une fois de retour sur le site Web de partie utilisatrice, les classes WIF se chargera de la réponse (avant de votre code est exécuté). Le certificat sera validé. Par défaut, si vous avez configuré votre site Web partie se fiant à FedUtil.exe (en cliquant sur « Ajouter STS référence dans votre application de partie se fiant à partir de Visual Studio), la classe de Microsoft vérifiera le certificat thumbprint.

Enfin, les cookies cadre établit WIF dans le navigateur de l'utilisateur (Dans mon expérience, les noms de cookies commencent avec « FedAuth ») qui contiennent les demandes 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 demandes de l'utilisateur dans le site Web de la partie se fiant à l'aide de l'ClaimsAuthenticationClass. C'est là votre code est en cours d'exécution à nouveau.

Je sais que ceci est différent de ce que vous décrivez, mais j'ai ce travail d'installation. J'espère que cela aide!

ps. S'il vous plaît vérifier les autres questions que j'ai posé des questions sur 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 de l'application se produit par le biais d'une redirection avec une chaîne de requête contenant l'URL de l'application, l'utilisateur se connecte à. Cette redirection se fait automatiquement la première fois qu'un utilisateur essaie d'accéder à une page qui nécessite une authentification. Sinon, 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 ce qui suit:

1) Encapsulate votre code STS dans une bibliothèque. 2) Référence de la bibliothèque de votre application. 3) Créer une connexion à la page dans votre application. Assure-toique cette page ne nécessite pas d'authentification. 4) Définissez la propriété de l'émetteur de l'élément wsFederation dans la section Microsoft.IdentityModel de votre web.config à la page de connexion.

Qu'est-ce que vous voulez faire est un signin actif. WIF comprend WSTrustChannel (Factory) qui vous permet de communiquer directement avec le STS et d'obtenir un jeton de sécurité. Si vous voulez que votre formulaire de connexion pour travailler de cette façon, vous pouvez suivre l'exemple « WSTrustChannel » du WIF 4.0 SDK. Une fois que vous avez obtenu le jeton, le code suivant prendra ce jeton et appeler le gestionnaire de WIF pour créer une session jeton et définir le cookie approprié:

public void EstablishAuthSession(GenericXmlSecurityToken genericToken)
{
    var handlers = FederatedAuthentication.ServiceConfiguration.SecurityTokenHandlers;            
    var token = handlers.ReadToken(new XmlTextReader(
                                        new StringReader(genericToken.TokenXml.OuterXml)));

    var identity = handlers.ValidateToken(token).First();
    // create session token
    var sessionToken = new SessionSecurityToken(
        ClaimsPrincipal.CreateFromIdentity(identity));
    FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
}

Une fois que vous avez fait cela, votre site doit se comporter comme si la signature passive avait eu lieu.

Vous pouvez utiliser le contrôle FederatedPassiveSignIn.

Réglage votre cookie comme celui-ci: FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie (sessionToken); travail doens't pour l'authentification unique à d'autres domaines.

Pour cookie doit être réglé par les STS pas au RP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top