ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null

Posted

技术标签:

【中文标题】ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null【英文标题】:ASP.NET Web API Authentication.GetExternalLoginInfoAsync always return null 【发布时间】:2018-11-09 07:02:04 【问题描述】:

我有 ASP.NET 5 项目,我正在使用 Web API 来建立外部登录(用于 Facebook 和 Google)。就我而言,我有包含以下代码的 Web API 控制器(不是 MVC 控制器):

[OverrideAuthentication]
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)]
[AllowAnonymous]
[Route("ExternalLogin", Name = "ExternalLogin")]
public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null)

    if (error != null)
        return Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error));

    if (!User.Identity.IsAuthenticated)
        return new ChallengeResult(provider, this);

    var exLog = await Authentication.GetExternalLoginInfoAsync();

当移动应用程序调用此方法时,我得到了正确验证的请求并且属性User.Identity.IsAuthenticated 为真,我可以在调试器中看到用户是正确的,但问题是exlog 变量总是为空。

这里是Authentication 属性

private IAuthenticationManager Authentication => this.Request.GetOwinContext().Authentication;

我阅读了堆栈上有关此错误的所有问题,但没有任何帮助,大多数问题都是针对 MVC 控制器的,因此没有帮助。

例如,this question 没有帮助我,因为它用于 MVC。

更新 我正在使用 Owin 4.0

【问题讨论】:

我会将此作为评论添加到开头,因为它可能不相关。我过去有一个问题,Auth.. 数据在返回请求中不可用,而只是重定向到 AuthBounce 操作(例如 return Redirect("~/AuthBounce"); then 尝试访问 var exLog = await Authentication.GetExternalLoginInfoAsync(); 工作. 试一试。我很欣赏这可能与您的设置有所不同完全相同。 我应该把return Redirect("~/AuthBounce");放在哪里? 删除当前的var exLog = await Authentication.GetExternalLoginInfoAsync(); 并将其替换为重定向。在您的新 AuthBounce 操作中添加 var exLog = await Authentication.GetExternalLoginInfoAsync(); 并查看它是否不再为空。就像我说的,这可能不相关/工作,但值得一试 @scgough 谢谢我试过了,但没用 重要的是在提出这个问题并开始赏金之后,我发现我根本不需要调用这个方法并且我的问题已经解决了,它完全与另一件事有关,那么这个问题,不便之处敬请见谅 【参考方案1】:

对于所有在 cmets 中要求我回答的人。 其实问题还没有解决,我也没有找到解决办法,很抱歉。

我发现我不需要从一开始就调用这个方法。 然后我完全走了另一条路(我不记得如何以及为什么)

只是一个小建议:再次考虑情况并重新考虑是否真的需要调用此方法。

我希望我能提供更多帮助,对不起。

【讨论】:

【参考方案2】:

你得到“NULL”是因为你没有写代码如果 IsAuthenticated = true 那么它应该怎么做? (意味着重定向到任何页面或其他)。

仔细查看 IsAuthenticated 的 if 条件: if (!User.Identity.IsAuthenticated)

也许这对你有帮助。

【讨论】:

不,这与我的问题完全没有关系。顺便说一句,问题解决了,我不再使用这种方法了。【参考方案3】:

尝试在 Google 控制台中启用 Google + API。在将密钥粘贴到代码后,还要确保密钥末尾没有与空格连接。

【讨论】:

以上是关于ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Web API 2第三课——.NET客户端调用Web API

Web API1.1 ASP.NET Web API入门

Asp.Net Web API 2第六课——Web API路由和动作选择

Asp.Net Web API 2第十三课——ASP.NET Web API中的JSON和XML序列化

Asp.Net Web API 2第七课——Web API异常处理

将文件从 ASP.NET Core Web api 发布到另一个 ASP.NET Core Web api