简体   繁体   English

GetExternalLoginInfoAsync在ASP.NET Core 2.0中返回null

[英]GetExternalLoginInfoAsync returns null in asp.net core 2.0

I want to connect to GitHub using OAuth in aspnet core 2.0. 我想在aspnet core 2.0中使用OAuth连接到GitHub。 I have the following setup. 我有以下设置。

Startup.cs: Startup.cs:

services.AddDbContext<DbContext>(options =>
            options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection"))
        );

        services.AddIdentity<User, Role>()
        .AddEntityFrameworkStores<DbContext>()
        .AddDefaultTokenProviders();

        services.AddMvc(options => options.OutputFormatters.Add(new HtmlOutputFormatter()));
        services.AddAntiforgery(x => x.HeaderName = "X-XSRF-TOKEN");

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        })
        .AddCookie()
        .AddGitHub(options =>
        {
            options.ClientId = "xxxxxxxxxx";
            options.ClientSecret = "xxxxxxxxxxxxxxx";
            options.CallbackPath = new PathString("/auth/callback/GitHub");
        })

Controller: 控制器:

[HttpGet("{provider}")]
    public IActionResult Index(string provider)
    {
        return Challenge(new AuthenticationProperties() { RedirectUri = Url.Action("CallBack", "Auth") }, provider);
    }

[HttpGet("callback")]
    public async Task<IActionResult> CallBack()
    {
        var info = await _signInManager.GetExternalLoginInfoAsync(); // <== this is always NULL
        return Redirect("~/");
    }

The auth flow gets completed correctly and without errors. 身份验证流程正确完成,没有错误。 However, the line 但是,线

var info = await _signInManager.GetExternalLoginInfoAsync();

always yields null. 总是产生null。

There are some leads scattered around the web, like this one , bit none seem to scratch my itch. 网络上散布着一些线索,就像这样 ,似乎没有任何东西会刮擦我的痒。

Thoughts? 有什么想法吗? Am I missing a setting somewhere? 我在某处缺少设置吗? Probably... 大概...

Thanks! 谢谢!

when using with identityserver4, in the following part of code IdentityConstants.ExternalScheme was not matching and hence "auth" was null . 与Identityserver4一起使用时,在代码的以下部分IdentityConstants.ExternalScheme不匹配,因此“ auth”为null

However, changing it to idsrv.external keeps it going. 但是,将其更改为idsrv.external可以继续进行。

 public async Task<ExternalLoginInfo> GetExternalLoginInfoAsync(string expectedXsrf = null)
    {
        var auth = await HttpContext.AuthenticateAsync(IdentityConstants.ExternalScheme);
        var items = auth?.Properties?.Items;
        if (auth?.Principal == null || items == null || !items.ContainsKey("LoginProviderKey"))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Instagram OAuth GetExternalLoginInfoAsync在.NET Core 2.0中始终返回null - Instagram OAuth GetExternalLoginInfoAsync always returns null in .NET Core 2.0 ASP.NET Facebook 登录 GetExternalLoginInfoAsync 总是返回 Null - ASP.NET Facebook Login GetExternalLoginInfoAsync Always Return Null ASP.NET 内核 Ajax 返回 null - ASP.NET Core Ajax returns null 在IAsyncPageFilter-Asp.Net Core 2.0 Razor Pages中的OnPageHandlerExecutionAsync中,PageResult始终返回null - PageResult always returns null in IAsyncPageFilter - OnPageHandlerExecutionAsync in Asp.Net Core 2.0 Razor Pages ASP.Net Core 2.0 SignInAsync返回异常值不能为null,提供者 - ASP.Net Core 2.0 SignInAsync returns exception Value cannot be null, provider ASP.NET Core 2.0模型针对未在表单中使用的项目返回null - ASP.NET Core 2.0 Model returns null for items not used in a form ASP.NET Core 2.0-配置[“ TestSecret”]始终返回null - ASP.NET Core 2.0 - Configuration[“TestSecret”] always return null ASP.NET Web API Authentication.GetExternalLoginInfoAsync 始终返回 null - ASP.NET Web API Authentication.GetExternalLoginInfoAsync always return null ASP.NET 核心 MVC<select><option>返回空值 - ASP.Net Core MVC <select> <option> returns null ASP.NET Core:JSON 配置 GetSection 返回 null - ASP.NET Core: JSON Configuration GetSection returns null
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM