Asp.net core mvc GetExternalLoginInfoAsync返回null dotnet core 2.0

Asp.net core mvc GetExternalLoginInfoAsync返回null dotnet core 2.0,asp.net-core-mvc,.net-core,facebook-oauth,asp.net-core-2.0,.net-core-2.0,Asp.net Core Mvc,.net Core,Facebook Oauth,Asp.net Core 2.0,.net Core 2.0,我正在尝试使用dot net core 2.0设置Facebook身份验证,但在我的ExternalLoginCallbackAsync方法中,我总是得到null作为响应,我遵循了文档,到目前为止,我就是这么做的: 在启动文件中的my ConfigureServices中: 在我的登录控制器中: public IActionResult ExternalLogin(string provider) { var authProperties = new A

我正在尝试使用dot net core 2.0设置Facebook身份验证,但在我的ExternalLoginCallbackAsync方法中,我总是得到null作为响应,我遵循了文档,到目前为止,我就是这么做的:

在启动文件中的my ConfigureServices中:

在我的登录控制器中:

public IActionResult ExternalLogin(string provider)
        {

            var authProperties = new AuthenticationProperties
            {
                RedirectUri = Url.Action("ExternalLoginCallbackAsync", "Login")                
            };
            return Challenge(authProperties,provider);
        }
在我的ExternalLoginCallbackAsync方法中 当我这样做的时候

var info = await _signInManager.GetExternalLoginInfoAsync();
有什么提示为什么我总是为空


谢谢

我按照Lasse Vabe Rolstad的建议查看了SignInManager代码,对我来说,auth属性中缺少一个密钥,因此我必须手动添加它,如下所示:

 var authProperties = new AuthenticationProperties
 {
     RedirectUri = Url.Action("ExternalLoginCallbackAsync", "Login"),
     Items = { new KeyValuePair<string, string>("LoginProvider",provider) }
 };
var authProperties=新的AuthenticationProperties
{
RedirectUri=Url.Action(“ExternalLoginCallbackAsync”,“Login”),
Items={newkeyvaluepair(“LoginProvider”,provider)}
};

在我的例子中,我必须启用SSL,一旦启用SSL,它将返回正确的信息。要启用SSL,请右键单击web服务器字符串中的项目-->属性-->调试-->检查(启用SSL)部分。我使用的是core 3.0

您可以查看中的第555行,了解它返回null时的不同条件。对我来说,这是因为MS需要有他们的“NameIdentifier”声明,这与子声明基本相同。为了解决这个问题,我添加了一个ClaimAction来将sub映射到NameIdentifier。谢谢你指出了正确的方向,我找到了答案
 var authProperties = new AuthenticationProperties
 {
     RedirectUri = Url.Action("ExternalLoginCallbackAsync", "Login"),
     Items = { new KeyValuePair<string, string>("LoginProvider",provider) }
 };