通过Oauth2进行LinkedIn身份验证返回null结果(error = access_denied)

Dou*_*ini 1 authentication asp.net-mvc linkedin oauth-2.0 asp.net-identity

我将我的ASP.NET MVC Web应用程序从成员身份转移到身份验证,因为我无法再在LinkedIn上进行身份验证.

Facebook身份验证仍然正常,但LinkedIn总是在GetExternalLoginInfo调用后返回null loginInfo.

对于LinkedIn我正在使用Owin LinkedIn提供程序:用于.NET的LinkedIn API.我也试图跟随杰里·佩尔泽的这篇文章不成功.

Application调用执行ExecuteResult方法的ExternalLogin Action并回调ExternalLoginCallback(在我允许访问应用程序之后).如前所述,方法AuthenticationManager.GetExternalLoginInfoAsync()始终返回null loginInfo.

我检查了LinkedIn中的应用程序设置,一切似乎都没问题.

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

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

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);
Run Code Online (Sandbox Code Playgroud)

ExternalLogin

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 }));
    }
Run Code Online (Sandbox Code Playgroud)

回复行动

var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
    return RedirectToAction("Login");
}
Run Code Online (Sandbox Code Playgroud)

LinkedIn CallBack URI

http://localhost:3279/signin-linkedin
Run Code Online (Sandbox Code Playgroud)

Dou*_*ini 5

经过一些研究和访问NuGet包存储库后,我发现了一个像魅力一样工作的Owin.Security.Providers预发布版本.我只需要从包管理器控制台安装它,并且LinkedIn外部登录的null返回问题已经消失.

Install-Package Owin.Security.Providers -Pre
Run Code Online (Sandbox Code Playgroud)

注意: 请注意使用预发布包可能会导致意外问题.