Utilisation OWIN Ws-Federation paquet pour s'authentifier auprès des services ADFS 3.0
J'ai un MVC site intranet qui a besoin d'utiliser les comptes active directory pour l'authentification.
J'configuration ADFS 3.0 (Win Server 2012 R2) et suivi cette pour l'installation de l'ADFS Partie de Confiance.
Cette autre post introduit le Ws-Federation OWIN composants et j'aimerais l'utiliser. Il mentionne comment se connecter à un Azure AD, mais rien de ce qui concerne ADFS.
J'ai essayé le réglage de la configuration des propriétés de "MetadataAddress" et "Wtrealm" pour correspondre à ce que j'ai configuré dans ADFS, mais à l'exécution j'obtiens une erreur:
A default value for SignInAsAuthenticationType was not found in IAppBuilder Properties.
This can happen if your authentication middleware are added in the wrong order, or if one is missing.
Je suis à la recherche de la bonne façon de supprimer cette erreur
OriginalL'auteur oscarmorasu | 2014-04-24
Vous devez vous connecter pour publier un commentaire.
Ouais.. je suis tombé sur le même problème. Il suffit de faire la suite et cela devrait fonctionner:
OriginalL'auteur LyphTEC
J'ai essayé d'obtenir ma tête autour de cela un certain temps maintenant, et grâce précisément à Lars Kemmann et Tratcher, je crois que la façon de le faire est comme suit:
Il semble contre-intuitif que vous êtes à la configuration de l'authentification par défaut de type 'Authentification par Cookie" pour obtenir WsFederation de travailler, mais ce sont vraiment juste des chaînes de caractères utilisée pour identifier chaque pièce de middleware (ce qui vous permet d'enregistrer le même type de middleware plusieurs fois, par exemple), ils évaluent comme suit:
CookieAuthenticationDefaults.AuthenticationType
= "Cookies"WsFederationAuthenticationDefaults.AuthenticationType
= "Fédération"Ce qui se passe ici est que nous racontons OWIN que le middleware de la mention "Cookies" doit être utilisé par défaut pour authentifier les demandes, nous avons ensuite ajouter le CookieAuthentication middleware (par défaut, c'est l'étiquette de "Cookies" de la
CookieAuthenticationDefaults.AuthenticationType
valeur, afin de ne pas avoir à écrire du code supplémentaire pour le configurer.), enfin, nous ajoutons la FederationAuthentication middleware (ce qui est étiqueté parWsFederationAuthenticationDefaults.AuthenticationType
- c'est à dire la "Fédération"), ma compréhension est que la Fédération middleware utilise le Cookie middleware pour gérer ses authentification témoins.Tout ce qui reste à faire est de configurer votre application pour appeler le middleware à un moment de votre choix, ce qui peut être réalisé dans un certain nombre de façons, dont certaines sont comme suit:
[Authorize]
attribut sur un Contrôleur MVCIAuthenticationManager
'sChallenge
méthode (passant dans l'étiquette de votre Fédération middleware)Quand j'ai posé cette question ici, Lars répondu avec un exemple clair de la façon de demander une authentification pour toutes les demandes, j'ai ensuite regroupés dans à la OWIN pipeline comme suit:
Noter que dans le premier exemple ci-dessus, j'ai déplacé les Wtrealm et MetadataAddress valeurs dans mon fichier de config pour la facilité d'entretien, ils sont de simples paramètres de l'application:
J'espère que cette aide.
J'ai trouvé que l'utilisation de app.SetDefaultSignInAsAuthenticationtype(CookieAuthenticationDefaults.AuthenticationType); a entraîné une authentification boucle résultant de l'exception: MSIS7042: La même session de navigateur client a fait '6' demandes dans le dernier '1' secondes alors que app.SetDefaultSignInAsAuthenticationtype(WsFederationAuthenticationDefaults.AuthenticationType); a fonctionné pour moi; et n'était certainement pas en passant les cookies après la négociation d'authentification initiale
OriginalL'auteur Tom Tregenna
En fait, vous êtes manque juste cette ligne qui est généralement avant la UseCookieAuthentication appel de méthode.
dans votre cas, il serait
C'est réellement ce qui est exécuté lorsque vous appelez UseExternalSignInCookie(...), externalAuthenticationType est ce que vous passez dans le paramètre de chaîne.
Donc, si vous êtes paramètre est le AuthenticationType, vous pouvez simplement appeler UseExternalSignInCookie comme il le fait pour vous.
OriginalL'auteur John C