ADFS v2.0 Erreur: MSIS7042: La même session du navigateur client a fait des demandes « 6 » dans les dernières secondes « 1 »

StackOverflow https://stackoverflow.com/questions/2640030

Question

Folks,   J'ai une application ASP.NET MVC que je tente d'obtenir l'aide de la version Release Candidate de v2.0 ADFS (Genève). J'ai configuré l'application en tant que fiducie de partie de confiance, et je l'ai utilisé Fedutil.exe de modifier Web.config de l'application afin qu'il ait les informations sur le serveur de Genève et utilise le serveur de Genève comme source de revendications.

Cependant, quand je tente de frapper l'application MVC, il redirige vers Genève, qui alors (après moi avertissement sur certs auto-signé) me redirige vers l'application MVC nouveau. Après avoir accepté les deux avertissements de cert auto-signés, les deux serveurs jouer au ping-pong avec l'autre dans une boucle infinie redirect jusqu'à ce que finalement Genève le message suivant:

La même session du navigateur client a fait des demandes « 6 » dans les dernières secondes « 1 ». Il pourrait y avoir une mauvaise configuration possible. Contactez votre administrateur pour plus de détails.

Il n'y a pas d'erreur dans les journaux d'événements sur le côté MVC ou à Genève, à l'exception d'un événement contenant le message ci-dessus. Si quelqu'un pouvait me donner des informations sur la façon d'essayer de débogage, diagnostiquer, et nous espérons résoudre ce problème, je serais éternellement reconnaissant.

Encore une fois, la boîte de Genève est le candidat v2.0 ADFS de sortie et le site ASP.NET MVC a été construit en utilisant la dernière version (fin '09) du SDK Windows Identity Foundation Web.config modifié à l'aide de FedUtil.exe le SDK WIF.


Alors vous tous un coup de pied de cette ... J'ai essayé cette même application de Firefox et ... ça fonctionne. Je me demande-t-mes lettres de créance de domaine, le serveur de ADFS me re-dirige une fois, puis je me retrouve sur la page d'accueil de ma demande, avec mon nom de compte et accueil personnalisé. Alors maintenant, la vraie question est la suivante: Pourquoi l'enfer est IE8 se faire prendre dans une boucle de redirection infinie et Firefox EST PAS ?? Après encore d'autres tests, j'ai été en mesure d'obtenir ce travail de scénario, hors de la boîte, sans modification de l'un des trucs de pipeline par défaut à partir ADFS v2 (RC) ou de WIF (RTW) sur les deux Safari et Firefox. IE8 est le seul navigateur pour présenter toute transaction de problème avec ce scénario d'authentification. J'ai tout essayé, y compris l'installation et la confiance des certificats auto-signés, en ajoutant les sites à ma zone Intranet local et laissant tomber la sécurité à faible et même la mise en premier et les cookies tiers pour permettre toujours.

Était-ce utile?

La solution 2

Il s'avère que le nom d'hôte de la partie utilisatrice avait un trait de soulignement en elle (khoffman_2). Apparemment, le trait de soulignement est un caractère DNS illégal et seulement IE rejette les informations avec le trait de soulignement en elle.

Je renommé ma machine de khoffman_2 à khoffman2 et la combinaison ADFS v2 compter / MVC parti fonctionne parfaitement sur Firefox, Safari et IE.

Autres conseils

J'ai eu le même problème avec ADFS 1.0 Et pour le résoudre, je me suis assuré que l'URL avait une barre oblique arrière « / » qui serait toujours travailler dans FireFox ainsi que IE

par exemple: https://somedomain.com/Application_2/

Bien que ce n'est pas votre problème, nous avons eu des problèmes identiques à ce que vous avez décrit. Notre solution a consisté à:

  1. Activé authentification de base dans IIS (ce rien résolu, mais a été nécessaire pour les 2 prochaines étapes)
  2. Désactiver l'authentification Windows dans IIS (ce résolu le problème pour certains navigateurs IE mais pas tous)
  3. Désactiver l'accès anonyme dans IIS (ce résolu le problème pour le reste des navigateurs IE)

La réponse de Jaxidian est proche.

Dans mon cas, je ne devais:

  • Authentification Windows -> Désactivé

  • Anonymous Auth -> Activé

  • ASP.NET Impersonation -> Désactivé

  • Formulaires Auth -> Désactivé

  • Auth de Windows -> Désactivé

Cette boucle peut se produire lorsqu'un utilisateur est pas autorisé à accéder à une page.

Nous avons eu un attribut d'autorisation personnalisée sur notre contrôleur MVC qui vérifie si l'utilisateur a un rôle sur la base des allégations fournies si le réglage de UseADFS était vrai dans les fichiers de configuration. Je pensais que ce paramètre a été réglé sur vrai et a été confondu que je continué à obtenir la boucle d'ADFS lorsque vous accédez à la page parce que j'étais dans les groupes qui ont été autorisés à accéder à la page.

La clé de dépannage était de faire une page web qui affiche mes adfs demandes sans nécessairement nécessitant une authentification.

@if (User.Identity.IsAuthenticated)
{
    <div>UserName: @User.Identity.Name;</div>

    var claimsIdentity = User.Identity as System.Security.Claims.ClaimsIdentity;
    <table>
        @foreach (var claim in claimsIdentity.Claims)
        {
        <tr><td>@claim.Type</td><td>@claim.Value</td></tr>
        }
    </table>


}

Je remarque que je commençais à me connecté sur ADFS, et mes demandes devenaient ensemble, si ADFS travaillait. La question réelle était mon fichier de configuration a UserADFS = « true » au lieu de UseADFS = « true », qui fait essentiellement mon habitude code d'autorisation de faux retour sur autorisation. Par conséquent, la page a continué à me portforwarding ADFS pour authentifier à nouveau.

Quoi qu'il en soit, si un utilisateur ne dispose pas d'revendications correctes pour accéder à la page, cette boucle se connecter ADFS peut se produire, ainsi.

En outre, si vous avez écrit un attribut personnalisé authorize assurez-vous de vérifier le lien suivant qui décrit comment empêcher la boucle.

boucle de redirection avec attribut .NET MVC Autoriser avec ADFS revendications

code de gestionnaire personnalisé HandleUnauthorizedRequest pour AuthorizeAttribute à partir de ce lien:

 protected override void HandleUnauthorizedRequest System.Web.Mvc.AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            //One Strategy:
            //filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);

            //Another Strategy:
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary(
                    new
                    {
                        controller = "u",
                        action = "LoginStatus",
                        errorMessage = "Error occurred during authorization or you do not have sufficient priviliges to view this page."
                    })
                );
        }
        else
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top