【问题标题】:OAuthOptions.Scope Cannot Be Assigned ToOAuthOptions.Scope 无法分配给
【发布时间】:2018-01-28 08:07:18
【问题描述】:

我正在尝试在我的 ASP.NET Core 2.0 应用中实现 LinkedIn/OAuth 身份验证,我需要将范围设置为 { "r_basicprofile", "r_emailaddress" } 以便我可以使用用户的电子邮件、个人资料图片等。

当我尝试在以下代码中设置范围时,出现以下错误:

无法将属性或索引器“OAuthOptions.Scope”分配给 - 它是 只读。

代码如下:

services.AddOAuth(CookieAuthenticationDefaults.AuthenticationScheme, options => {

   options.SignInScheme = "LinkedIn";
   options.ClientId = "1234567890";
   options.ClientSecret = "1234567890";
   options.CallbackPath = "/linkedin-callback";

   // Configure the LinkedIn endpoints                
   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 = { "r_basicprofile", "r_emailaddress" };

   options.Events = new OAuthEvents
   {
        OnCreatingTicket = OnCreatingTicketLinkedInCallBack,
        OnTicketReceived = OnTicketReceivedCallback
   };
})

知道如何设置范围吗?

附:我尝试从我的 ASP.NET Core 1.1 调整代码。此代码在 ASP.NET Core 1.1 应用程序中运行良好。

【问题讨论】:

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


    【解决方案1】:

    Scope = { "r_basicprofile", "r_emailaddress" } 语法仅在使用对象初始化时可用。在这里,options 对象不是从您的代码中实例化的,而是由 ASP.NET Core 直接提供的,因此您不能使用此语法。

    好消息是Scope 属性是一个集合(内部是一个哈希集),所以您可以简单地这样做:

    options.Scope.Add("r_basicprofile");
    options.Scope.Add("r_emailaddress");
    

    如果您想摆脱默认范围,可以使用options.Scope.Remove("scope")options.Scope.Clear() 删除它们。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2017-01-26
      • 2020-11-17
      • 2020-03-31
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多