通过 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
注意:请注意,使用预发布包可能会出现意想不到的问题。
我将我的 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
注意:请注意,使用预发布包可能会出现意想不到的问题。