OAuthOptions.Scope无法分配给

Sam*_*Sam 4 oauth asp.net-authentication asp.net-core

我正在尝试在我的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
   };
})
Run Code Online (Sandbox Code Playgroud)

知道如何设置范围吗?

PS我试图改编我的ASP.NET Core 1.1中的代码.此代码在ASP.NET Core 1.1应用程序中运行良好.

Kév*_*let 8

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

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

options.Scope.Add("r_basicprofile");
options.Scope.Add("r_emailaddress");
Run Code Online (Sandbox Code Playgroud)

如果要删除默认范围,可以使用options.Scope.Remove("scope")或删除它们options.Scope.Clear().