【问题标题】:Setting Up LinkedIn/OAuth Authentication in ASP.NET Core 2.0在 ASP.NET Core 2.0 中设置 LinkedIn/OAuth 身份验证
【发布时间】:2018-01-28 08:17:50
【问题描述】:

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

没有配置身份验证处理程序来处理该方案:LinkedIn

这是我在ConfigureServices 中的Startup.cs 中添加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
           };
});

我的错误在哪里?

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

没有配置 IAuthenticationSignInHandler 来处理登录 方案:social_login

【问题讨论】:

    标签: oauth asp.net-core asp.net-authentication


    【解决方案1】:

    您将与您的自定义 LinkedIn 处理程序注册关联的身份验证方案与OAuthHandler 最终将调用以保持身份的登录方案(通常是 cookie 处理程序实例)混合在一起。

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

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

    注意:如果social_login 是默认登录方案,您可以删除SignInScheme 分配(即,如果您调用services.AddAuthentication("social_login")services.AddAuthentication(options => options.DefaultSignInScheme = "social_login")

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

    【讨论】:

    • 我刚刚发布了对原始帖子的更新。我真的很高兴这件事出现了。我想使用不同的方案,以便我内部生成的 cookie 的“名称”与我从社交身份验证提供者那里获得的不同。我只是不确定如何处理我遇到的新错误。
    • 您的 cookie 处理程序实例是否命名为 social_login?发布整个代码会有所帮助。
    • 我真的不是这方面的专家,但如果我理解正确的话,我确实会从社交服务提供商那里得到一个 cookie。过去我的应用程序接受这些 cookie 并认为用户已通过身份验证时遇到过问题。我所做的是,一旦我从社交提供者那里得到适当的响应,我就会删除该 cookie,并使用我需要的所有用户信息创建一个新的,并将该 cookie 用作我的“合法”cookie。有意义吗?
    • 您并不能完全从外部提供者那里“获取”一个 cookie,但是 OAuth2 处理程序确实会在您的用户到达带有 OAuth2 授权码的回调路径。有两个单独的 cookie 是可能的(这是 ASP.NET Core Identity 使用的方法)。为此,只需生成另一个 cookie 处理程序实例:.AddCookie("internal_cookie").AddCookie("external_cookie")
    • 对。使用 HttpContext.AuthenticateAsync("external_cookie") 检索存储在外部 cookie 中的声明。
    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2018-06-23
    • 2018-01-30
    • 2018-01-23
    • 2017-10-13
    相关资源
    最近更新 更多