我将ASP.NET MVC Web应用程序从成员身份转移到身份验证,因此我无法在LinkedIn上进行身份验证。
Facebook身份验证仍然正常,但LinkedIn总是在GetExternalLoginInfo调用后返回null loginInfo。
对于我使用Owin LinkedIn提供商的LinkedIn:LinkedIn APIs for .NET。我也试图关注this post from Jerrie Pelser。
Application调用执行ExecuteResult方法的ExternalLogin Action并回调ExternalLoginCallback(在我允许访问应用程序之后)。如前所述,方法AuthenticationManager.GetExternalLoginInfoAsync()始终返回null 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);
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 }));
}
回复行动
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
LinkedIn CallBack URI
http://localhost:3279/signin-linkedin
答案 0 :(得分:5)
经过一些研究和访问NuGet包存储库后,我发现prerelease version of Owin.Security.Providers就像一个魅力。我只需要从包管理器控制台安装它,并且LinkedIn外部登录的null返回问题已经消失。
Install-Package Owin.Security.Providers -Pre
警告: 请注意,使用预发布包可能会导致意外问题。