Skip to main content
 首页 » 编程设计

asp.net-mvc之在 MVC5 中使用 OWIN Oauth 的 Google 身份验证未命中 ExternalLoginCallback 函数

2024年11月24日11linjiqin

我目前正在升级我的登录过程,以便 Google 在他们贬低他们的 OpenID 登录方法之前使用 OAuth。

到目前为止,我确定的步骤是我已将 Microsoft.Owin.Security.Google 包升级到版本 2.1.0,因为该版本包括在 UseGoogleAuthentication 方法中包含选项的能力。

我尝试在链接中使用 Alex Wheat 的解决方案:
Get ExtraData from MVC5 framework OAuth/OWin identity provider with external auth provider

Startup.Auth.cs(也包括 Facebook 身份验证)中的代码来自:

    var facebookAuthenticationOptions = new FacebookAuthenticationOptions() 
        { 
            AppId = "MYAPPID", 
            AppSecret = "MYSECRET" 
        }; 
        facebookAuthenticationOptions.Scope.Add("email"); 
        app.UseFacebookAuthentication(facebookAuthenticationOptions); 
 
        app.UseGoogleAuthentication(); 

对此:
var facebookAuthenticationOptions = new FacebookAuthenticationOptions() 
        { 
            AppId = "MYAPPID", 
            AppSecret = "MYSECRET" 
        }; 
        facebookAuthenticationOptions.Scope.Add("email"); 
        app.UseFacebookAuthentication(facebookAuthenticationOptions); 
 
 
        var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions 
        { 
            ClientId = "MYCLIENTID", 
            ClientSecret = "MYSECRET", 
            CallbackPath = new PathString("/en/Account/ExternalLoginCallback"), 
            Provider = new GoogleOAuth2AuthenticationProvider() 
            { 
 
            } 
        }; 
 
        app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions); 

在向 Google 身份验证添加选项后,我的应用程序不允许为 google 或 facebook 调用 ExternalLoginCallback 操作(facebook 代码没有更改,但问题仍然影响它)。

在前端,点击外部登录按钮后,页面将我重定向到下面的链接并返回一个空的白屏

https....../en/Account/ExternalLoginCallback#__=_ (There is actually only a single underscore before the = sign, SO syntax removes it if I have it as it appears on my address bar).



Facebook 和

https....../en/Account/ExternalLoginCallback



对于谷歌。它不会像往常一样命中下面的 Controller 方法(我尝试在此函数中放置调试断点,并且在有 google 身份验证选项时它永远不会停止。
    // GET: /Account/ExternalLoginCallback 
    [AllowAnonymous] 
    public async Task<ActionResult> ExternalLoginCallback(string returnUrl) 
    { 

如果我从 Google 身份验证中删除身份验证选项,它只会恢复到旧的 OpenID 登录名并再次正常工作。

我在这里错过了一些简单的东西吗?或者 Owin.Security.Google 库内部发生了什么不好的事情导致了问题?

请您参考如下方法:

只试这个

var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions 
        { 
            ClientId = "MYCLIENTID", 
            ClientSecret = "MYSECRET", 
        }; 
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions); 

这对我有用