【发布时间】:2015-06-12 08:43:18
【问题描述】:
我将我的 ASP.NET MVC Web 应用程序从成员身份转移到身份验证,因为我无法再在 LinkedIn 上进行身份验证。
Facebook 身份验证仍然可以正常工作,但在调用 GetExternalLoginInfo 之后 LinkedIn 总是返回 null loginInfo。
对于 LinkedIn,我使用的是 Owin LinkedIn 提供程序:LinkedIn APIs for .NET。我也没有成功尝试关注this post from Jerrie Pelser。
应用程序调用执行 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);
外部登录
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
【问题讨论】:
标签: asp.net-mvc authentication oauth-2.0 linkedin asp.net-identity