C# GetExternalLoginInfoAsync null,OWIN在ExternalLoginCallback中,除非已经登录到google
我一直在尝试使用google帐户在MVC5应用程序中使用OWIN实现外部登录 如果我已经登录谷歌,点击我应用程序中的谷歌按钮就可以了,在允许我访问登录信息后,它会将我带到我的注册页面 如果当我点击我的应用程序google按钮时我还没有登录到google,我会被提示按预期使用google登录,但是回拨接收器似乎没有看到我已经登录,因为在这种情况下,logininfo在回调中始终为空,如下所示C# GetExternalLoginInfoAsync null,OWIN在ExternalLoginCallback中,除非已经登录到google,c#,asp.net,asp.net-mvc,login,owin,C#,Asp.net,Asp.net Mvc,Login,Owin,我一直在尝试使用google帐户在MVC5应用程序中使用OWIN实现外部登录 如果我已经登录谷歌,点击我应用程序中的谷歌按钮就可以了,在允许我访问登录信息后,它会将我带到我的注册页面 如果当我点击我的应用程序google按钮时我还没有登录到google,我会被提示按预期使用google登录,但是回拨接收器似乎没有看到我已经登录,因为在这种情况下,logininfo在回调中始终为空,如下所示 [AllowAnonymous] public async Task<ActionR
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
// Code omitted for brevity.
}
}
[AllowAnonymous]
公共异步任务ExternalLoginCallback(字符串返回URL)
{
var loginInfo=await AuthenticationManager.GetExternalLoginInfoAsync();
if(loginInfo==null)
{
返回重定向操作(“登录”);
}
//为简洁起见,省略了代码。
}
}
有人有解决办法或解释吗?这几乎就像外部cookie在登录谷歌后收到请求后才提供给OWIN一样。经过几天的调查,我终于找到了答案。问题似乎是,在登录谷歌后,它会重定向回该站点,并且没有登录谷歌的权限,因此会重定向回登录页面。不过,如果已经登录谷歌,我也不知道为什么会这样。我在找到这篇文章后发现了这个 我在配置文件中添加了以下内容
<location path="signin-google">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
它现在可以工作了…如果你已经登录到谷歌,你可以完全避免外部登录回调,只需重定向到应用程序。回调是调用身份验证API的重定向;OWIN在这里的答案试图配置的内容之外为您处理此URL。请参阅我关于以下问题的答案:这很可能是由于启用了窗口身份验证,而对于使用google auth的MVC应用程序,不应该启用窗口身份验证