Domanda

Avere una cosa strana che accadrà qui.

Ho costruito un sito Web ASP.NET MVC5 e hanno account locali che funzionano bene tramite identità ASP.NET.

Ora sto cercando di abilitare l'autenticazione esterna, ma accadendo qualche stranezza.

Sono certo che ho seguito i passaggi giusti. Ho questo nel mio 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();
    }
.

Quando l'utente fa clic sul collegamento per accedere con Google, viene chiamato il metodo externallogin:

    [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 }));
    }
.

Che ho verificato tramite il debug entra nel metodo ExecureSult della classe ChallengeSult:

        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);
        }
.

Tuttavia, nel browser, non succede nulla. Ho solo una pagina vuota dove mi aspetterei un reindirizzamento alla pagina di Google Signin.

Non ci sono errori segnalati affatto.

L'altra cosa divertente è che ho provato a creare un'altra applicazione MVC5, ma ottengo un "riferimento all'oggetto non impostato su un'istanza di un oggetto" Popup in VS2013 e il progetto risultante manca il controller account di solito lì per impostazione predefinita.

Ho riparato l'installazione di VS2013, ho reinstallato l'aggiornamento 1 e ho anche aggiornato tutti i pacchetti Nuget nella soluzione.

Ho esaurito le idee su dove andare dopo.

Aggiornamento 1 Pensando che questo possa essere correlato al mio PC, ho schierato il sito Web a Azure e il problema persiste ancora. Ciò significa che potrebbe essere correlato a un gruppo mancante e non viene segnalato correttamente? Ho eseguito Fusionlog, ma non vedo alcun errore obbligatorio.

Spinnando una nuova VM con un'installazione pulita di Windows 8 e VS2013 per vedere se riesco a ottenere un nuovo progetto a lavorare lì.

Aggiorna 2 OK, ho appena eseguito un altro giro di "rete" che cattura, e quando l'utente seleziona il provider esterno, viene pubblicato sull'azione externallogin, ma la risposta è un 401 non autorizzato. Cosa potrebbe causare questo?

È stato utile?

Soluzione

OK,

Ho capito cosa (la parte importante) del problema era.

Prima di tutto, non ho ancora noto perché quando creo un progetto MVC non ricevo una classe di confazione di impalcatura.

Tuttavia, sembra che il mio problema sia che il mio pulsante di accesso passò "Google" invece di "Google" come fornitore.

Seriamente!?Sono un po 'sorpreso che l'involucro avrebbe contarato con il nome del fornitore, ma lì vai.

Altri suggerimenti

Questa non è la risposta alla tua domanda ma risponde un problema molto simile

Se avevi Owin 2.0 e si migra a 2.1

La _externalloginslistPartial deve passare da questo:

<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>
.

a questo

<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>
.

L'unica cosa che cambia è il nome del pulsante ma che potrebbe rompere la testa come la mia e costarmi 2 giorni di lavoro per trovare il problema.

Forse questo è spiegato nella nuova versione Owin, se non deve essere qualcosa da specificare in capitelli.

Ho appena corso nello stesso problema con il mio server WebAPI ASP.NET.Stavo passando l'autenticazione corretta nel metodo della sfida, ma sta ancora ricevendo una pagina vuota.

Risulta che il problema è stato l'ordine che ho aggiunto i fornitori di OAuth nella pipeline Owin all'avvio. All'incirca il mio ordine di lavoro:

        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);
.

In precedenza stavo aggiungendo i metodi USECors + UsewebAPI prima del metodo UseGoogleAuthentication.

Ho trovato anche questo post anche: http://coding.abel.nu/2014/06 / Comprensione-THE-OWIN-ESTERNA-AUTENTICAZIONE-Pipeline /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top