问题描述
我正在尝试将LinkedIn身份验证添加到我的ASP.NET Core 2.0应用中,但出现以下错误:
I'm trying to add LinkedIn authentication to my ASP.NET Core 2.0 app but getting the following error:
这是我在Startup.cs
的ConfigureServices
中添加LinkedIn/OAuth身份验证的方式:
Here's how I add LinkedIn/OAuth authentication in the ConfigureServices
in Startup.cs
:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie("internal_cookie", options => {
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login";
})
.AddCookie("external_cookie")
.AddOAuth("LinkedIn", options => {
options.SignInScheme = "external_cookie";
options.ClientId = "1234567890";
options.ClientSecret = "1234567890";
options.CallbackPath = "/linkedin-callback";
options.AuthorizationEndpoint = "https://www.linkedin.com/oauth/v2/authorization";
options.TokenEndpoint = "https://www.linkedin.com/oauth/v2/accessToken";
options.UserInformationEndpoint = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,picture-url,picture-urls::(original))";
options.Scope.Add("r_basicprofile");
options.Scope.Add("r_emailaddress");
options.Events = new OAuthEvents
{
OnCreatingTicket = OnCreatingTicketLinkedInCallBack,
OnTicketReceived = OnTicketReceivedCallback
};
})
.AddFacebook(options =>
{
options.AppId = "1234567980";
options.AppSecret = "1234567890";
options.Events = new OAuthEvents
{
OnCreatingTicket = OnCreatingTicketFacebookCallback,
OnTicketReceived = OnTicketReceivedCallback
};
})
.AddGoogle(options =>
{
options.ClientId = "1234567890";
options.ClientSecret = "1234567890";
options.CallbackPath = "/google-callback";
options.Events = new OAuthEvents
{
OnCreatingTicket = OnCreatingTicketGoogleCallback,
OnTicketReceived = OnTicketReceivedCallback
};
});
我的错误在哪里?
更新:在提出了建议的更正之后,我现在出现以下错误:
UPDATE:After making the corrections suggested, I'm now getting the following error:
推荐答案
您将与自定义LinkedIn处理程序注册相关联的身份验证方案与OAuthHandler
最终会调用以保留身份的登录方案(通常是Cookie处理程序实例).
You mixed up the authentication scheme associated with your custom LinkedIn handler registration with the sign-in scheme that OAuthHandler
will ultimately call to persist the identity (typically a cookie handler instance).
修正您的注册,以指定LinkedIn
作为方案和social_login
作为登录方案(假设您的cookie处理程序确实命名为social_login
),并且它应该可以工作:
Fix your registration to specify LinkedIn
as the scheme and social_login
as the sign-in scheme (assuming your cookie handler is indeed named social_login
), and it should work:
services.AddAuthentication()
.AddCookie("social_login")
.AddOAuth("LinkedIn", options =>
{
options.SignInScheme = "social_login";
// ...
});
注意:如果social_login
是默认的登录方案(即,如果您调用services.AddAuthentication("social_login")
或services.AddAuthentication(options => options.DefaultSignInScheme = "social_login")
:
Note: you can remove the SignInScheme
assignation if social_login
is the default sign-in scheme (i.e if you call services.AddAuthentication("social_login")
or services.AddAuthentication(options => options.DefaultSignInScheme = "social_login")
:
services.AddAuthentication("social_login")
.AddCookie("social_login")
.AddOAuth("LinkedIn", options =>
{
// ...
});
这篇关于在ASP.NET Core 2.0中设置LinkedIn/OAuth身份验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!