我将我的ASP.NET MVC web应用程序从成员身份转移到了身份验证,从那以后我就不能再在LinkedIn上进行身份验证了。
Facebook身份验证仍然正常,但LinkedIn在GetExternalLoginInfo调用后总是返回一个空的loginInfo。
对于领英,我正在使用Owin领英提供商:领英.NET API。我也没有成功地尝试关注Jerrie Pelser的这篇帖子。
应用程序调用执行ExecuteResult方法的ExternalLogin Action,并回调ExternalLoginCallback(在我允许访问应用程序之后)。正如我之前所说的,方法AuthenticationManager.GetExternalLoginInfoAsync()总是返回一个null的loginInfo。
我检查了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);
外部登录
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");
}
领英回拨URI
http://localhost:3279/signin-linkedin
经过一些研究和访问NuGet包存储库,我发现了Owin.Security.Providers的预发布版本,它的工作效果很好。我只需要从软件包管理器控制台安装它,LinkedIn外部登录返回null的问题已经解决了。
Install-Package Owin.Security.Providers -Pre
注意:请注意,使用预发布包可能会导致意外问题。