通过 Oauth2 的 LinkedIn 身份验证 returns 空结果(错误=access_denied)

LinkedIn Authentication via Oauth2 returns null result (error=access_denied)

我将我的 ASP.NET MVC Web 应用程序从成员资格转移到身份验证,从那以后我无法再在 LinkedIn 上进行身份验证。

Facebook 身份验证仍然工作正常,但 LinkedIn 在调用 GetExternalLoginInfo 后始终返回空登录信息。

对于 LinkedIn,我使用的是 Owin LinkedIn 提供商:LinkedIn APIs for .NET. I also unsuccessful tried to follow this post from Jerrie Pelser

应用程序调用执行 ExecuteResult 方法的 ExternalLogin 操作并回调 ExternalLoginCallback(在我允许访问应用程序之后)。正如我之前所说,方法 AuthenticationManager.GetExternalLoginInfoAsync() 总是 returns 一个空的 loginInfo.

我检查了 LinkedIn 中的应用程序设置,似乎一切正常。

糟糕!我差点忘了说 LinkedIn 正在返回 URL 并带有一般错误消息:"GET /Account/ExternalLoginCallback?error=access_denied HTTP/1.1"

我可以使用 DotNetOpenAuth.Clients(托管 github)进行身份验证,但我只想使用身份。

Startup.Auth.cs

var linkedInOptions = new LinkedInAuthenticationOptions();
        linkedInOptions.ClientId = "Xxxxx";
        linkedInOptions.ClientSecret = "Yyyyyyy";

        linkedInOptions.Scope.Add("r_fullprofile");

        linkedInOptions.Provider = new LinkedInAuthenticationProvider()
        {
            OnAuthenticated = async context =>
            {
                context.Identity.AddClaim(new System.Security.Claims.Claim("LinkedIn_AccessToken", context.AccessToken));
            }
        };

        linkedInOptions.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;

        app.UseLinkedInAuthentication(linkedInOptions);

外部登录

public ActionResult ExternalLogin(string provider, string returnUrl)
    {
        // Request a redirect to the external login provider
        return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
    }

回调操作

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
    return RedirectToAction("Login");
}

LinkedIn 回调 URI

http://localhost:3279/signin-linkedin

经过一些研究并访问了 NuGet 包存储库后,我发现了一个 prerelease version of Owin.Security.Providers 非常有用的东西。我只需要从包管理器控制台安装它,LinkedIn 外部登录的空 return 问题就消失了。

Install-Package Owin.Security.Providers -Pre

注意:请注意,使用预发布包可能会出现意想不到的问题