在ASP.NET Core 2.0中设置LinkedIn/OAuth身份验证

在ASP.NET Core 2.0中设置LinkedIn/OAuth身份验证,oauth,asp.net-core,asp.net-authentication,Oauth,Asp.net Core,Asp.net Authentication,我正在尝试将LinkedIn身份验证添加到我的ASP.NET Core 2.0应用程序中,但出现以下错误: 未配置任何身份验证处理程序来处理方案:LinkedIn 以下是我如何在Startup.cs中的ConfigureServices中添加LinkedIn/OAuth身份验证: services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie("internal_cookie"

我正在尝试将LinkedIn身份验证添加到我的ASP.NET Core 2.0应用程序中,但出现以下错误:

未配置任何身份验证处理程序来处理方案:LinkedIn

以下是我如何在
Startup.cs
中的
ConfigureServices
中添加LinkedIn/OAuth身份验证:

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
           };
});
我的错误在哪里

更新: 在进行建议的更正后,我现在得到以下错误:

没有配置IAAuthenticationSignInHandler来处理的登录 方案:社交网络登录


您将与自定义LinkedIn处理程序注册相关联的身份验证方案与登录方案混为一谈,
OAuthHandler
最终将调用该方案来持久化标识(通常是cookie处理程序实例)

修复您的注册,将
LinkedIn
指定为方案,将
social\u login
指定为登录方案(假设您的cookie处理程序确实命名为
social\u login
),它应该可以工作:

services.AddAuthentication()
    .AddCookie("social_login")
    .AddOAuth("LinkedIn", options =>
    {
        options.SignInScheme = "social_login";

        // ...
    });
注意:如果
social\u login
是默认登录方案(即,如果您调用
services.AddAuthentication(“social\u login”)
services.AddAuthentication(选项=>options.DefaultSignInScheme=“social\u login”)
,则可以删除
SignInScheme
分配:


我刚刚发布了我的原始帖子的更新。我真的很高兴出现了这个问题。我想使用不同的方案,这样我的内部制作的cookie将有一个不同的“名称”我只是不知道如何处理我收到的新错误。你的cookie处理程序实例名为
social\u login
?发布整个代码会有所帮助。我真的不是这方面的专家,但如果我理解正确,我确实从社交提供商那里得到了cookie。我在过去遇到过问题在我的应用程序接受这些cookie并认为该用户经过身份验证之前。我要做的是,一旦我从社交提供商那里得到正确的响应,我就会杀死该cookie并创建一个包含我所需的所有用户信息的新cookie,并将该cookie用作我的“合法”cookie。有意义吗?你不完全“获取”来自外部提供程序的cookie,但OAuth2处理程序确实为您创建了一个cookie,方法是当您的用户使用OAuth2授权代码到达回调路径时,请求由
signnscheme
表示的cookie处理程序执行此操作。可以使用两个单独的cookie(这是ASP.NET Core Identity使用的方法)。为此,只需生成另一个cookie处理程序实例:
.AddCookie(“内部”cookie”).AddCookie(“外部”cookie”)
。对。使用
HttpContext.authenticateSync(“外部”cookie”)
检索存储在外部cookie中的声明。
services.AddAuthentication("social_login")
    .AddCookie("social_login")
    .AddOAuth("LinkedIn", options =>
    {
        // ...
    });