Question

avoir une chose étrange qui se passe ici.

J'ai construit un site Web ASP.NET MVC5 et j'ai des comptes locaux fonctionnant bien via l'identité ASP.NET.

J'essaie maintenant de activer l'authentification externe, mais que de l'étrangeté se produise.

Je suis certain que j'ai suivi les bonnes étapes. J'ai ceci dans mon startup.auth.cs:

    public void ConfigureAuth(IAppBuilder app)
    {
        // Enable the application to use a cookie to store information for the signed in user
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login")
        });
        // Use a cookie to temporarily store information about a user logging in with a third party login provider
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

        // Uncomment the following lines to enable logging in with third party login providers
        //app.UseMicrosoftAccountAuthentication(
        //    clientId: "",
        //    clientSecret: "");

        //app.UseTwitterAuthentication(
        //   consumerKey: "",
        //   consumerSecret: "");

        //app.UseFacebookAuthentication(
        //   appId: "",
        //   appSecret: "");

        app.UseGoogleAuthentication();
    }

Lorsque l'utilisateur clique sur le lien pour vous connecter avec Google, la méthode externallogin est appelée:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult ExternalLogin(string provider, string returnUrl)
    {
        // Request a redirect to the external login provider
        return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
    }

que j'ai vérifié via le débogage entrer dans la méthode exécuteresult de la classe Challengeresult:

        public override void ExecuteResult(ControllerContext context)
        {
            var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
            if (UserId != null)
            {
                properties.Dictionary[XsrfKey] = UserId;
            }
            context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
        }

Cependant, dans le navigateur, rien ne se passe. Je viens d'obtenir une page vierge où j'attendrais une redirection à la page Signin Google.

Il n'y a aucune erreur signalée du tout.

L'autre chose amusante est que j'ai essayé de créer une autre application MVC5, mais je reçois une "référence d'objet non définie sur une instance d'un objet" dans VS2013, et le projet résultant manque au contrôleur de compte qui est généralement là-bas. Par défaut.

J'ai réparé l'installation de VS2013, j'ai réinstallé la mise à jour 1, et j'ai également mis à jour tous les packages Nuget dans la solution.

Je suis à court d'idées sur où aller ensuite.

Mise à jour 1 Penser que cela peut être lié à mon PC, j'ai déployé le site Web à Azure et le problème persiste toujours. Cela signifie-t-il que cela pourrait être lié à une assemblée manquante et qu'il n'est pas rapporté correctement? J'ai couru FusionLog, mais je ne vois pas de défaillances contraignantes.

Tournage d'une nouvelle machine virtuelle avec une installation propre de Windows 8 et VS2013 pour voir si je peux obtenir un nouveau projet y travailler.

mise à jour 2 OK, il suffit de courir une autre ronde de capture "réseau", et lorsque l'utilisateur sélectionne le fournisseur externe, il post sur l'action externalis, mais la réponse est une 401 non autorisée. Qu'est-ce qui pourrait causer cela?

Était-ce utile?

La solution

OK,

J'ai compris ce que (la partie importante) de la question était.

Tout d'abord, je ne savais toujours pas pourquoi quand je crée un projet MVC, je ne reçois pas une classe de comptes d'échafolde.

Cependant, il semble que mon problème soit que mon bouton de connexion passait "Google" au lieu de "Google" comme fournisseur.

Sérieusement !?Je suis un peu surpris que le boîtier compterait avec le nom du fournisseur, mais vous y allez.

Autres conseils

Ce n'est pas la réponse à votre question, mais elle répond un problème très similaire

Si vous aviez Owin 2.0 et que vous migrez à 2.1

Le _ExternalLoginsListPartial doit passer de ceci:

<button type="submit" class="btn btn-default" id="@p.AuthenticationType" name="Partner" value="@p.AuthenticationType" title="Log in using your @p.Caption account">@p.AuthenticationType</button>

à cette

<button type="submit" class="btn btn-default" id="@p.AuthenticationType" name="provider" value="@p.AuthenticationType" title="Log in using your @p.Caption account">@p.AuthenticationType</button>

La seule chose qui change est le nom du bouton mais qui pourrait vous briser la tête comme la mienne et me coûter 2 jours de travail pour trouver le problème.

Peut-être que cela est expliqué dans la nouvelle version Owin, sinon doit être quelque chose à spécifier dans les capitales.

Je viens de courir dans le même problème avec mon serveur ASP.NET webapi.Je passais le bon authentification de l'authentification dans la méthode du défi mais que vous obtenez toujours une page vierge.

Il s'agit de l'émission que j'ai ajouté les fournisseurs OAuth dans le pipeline Owin au démarrage. À peu près mon ordre de fonctionnement:

        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
        OAuthBearerOptions = new OAuthBearerAuthenticationOptions();

        var authServerOptions = new OAuthAuthorizationServerOptions
        {
        ...
        };

        // Token Generation
        app.UseOAuthAuthorizationServer(authServerOptions);
        app.UseOAuthBearerAuthentication(OAuthBearerOptions);

        // Configure Google External Login
        GoogleAuthOptions = new GoogleOAuth2AuthenticationOptions()
        {
            ClientId = xxxx,
            ClientSecret = xxxx,
            Provider = new GoogleAuthProvider()
        };
        app.UseGoogleAuthentication(GoogleAuthOptions);

        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
        app.UseWebApi(config);

Auparavant, j'ajoutais l'utilisation des méthodes USECORS + USEWEBAPI avant la méthode UTILISATIONGOOGLEAuthentication.

J'ai trouvé que ce post sera utile aussi: http://coding.abel.nu/2014/06 / compréhension-the-owin-authentification-authentification-pipeline /

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