如何将服务中的令牌很好地检索到控制器(Core2.0OAuth2)中?

如何将服务中的令牌很好地检索到控制器(Core2.0OAuth2)中?,oauth,controller,token,linkedin,asp.net-core-2.0,Oauth,Controller,Token,Linkedin,Asp.net Core 2.0,在ASP.NETMVCCore2中,我们尝试使用OAuth身份验证调用LinkedinWebAPI。 我们能够声明OAuth身份验证服务并从Linkedin检索访问令牌,如下代码所示。 现在我们想从控制器请求API。要做到这一点,我们必须从OAuth服务获取访问令牌,我们已经用AddOAuth方法声明了该服务。我们怎么能做到呢?在任何地方都找不到一个例子 谢谢你的帮助,我们真的被困住了 services.AddAuthentication(CookieAuthentication

在ASP.NETMVCCore2中,我们尝试使用OAuth身份验证调用LinkedinWebAPI。 我们能够声明OAuth身份验证服务并从Linkedin检索访问令牌,如下代码所示。 现在我们想从控制器请求API。要做到这一点,我们必须从OAuth服务获取访问令牌,我们已经用AddOAuth方法声明了该服务。我们怎么能做到呢?在任何地方都找不到一个例子

谢谢你的帮助,我们真的被困住了

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
           .AddCookie("linkedin_login", options =>
           {
               options.LoginPath = new PathString("/login");
               options.LogoutPath = new PathString("/logout");
           })
           .AddOAuth("LinkedIn", options =>
           {
               options.SignInScheme = "linkedin_login";
               options.ClientId = Configuration["linkedin:clientId"];
               options.ClientSecret = Configuration["linkedin:clientSecret"];
               options.CallbackPath = new PathString("/signin-linkedin");

               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,formatted-name,email-address,picture-url,picture-urls,headline,public-profile-url,industry,three-current-positions,three-past-positions,positions::(original))";

               // To save the tokens to the Authentication Properties we need to set this to true
               // See code in OnTicketReceived event below to extract the tokens and save them as Claims
               options.SaveTokens = true;

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

               options.Events = new OAuthEvents
               {
                   OnCreatingTicket = async context =>
                   {
                       #region OnCreatingTicket
                       // Retrieve user info
                       var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint);
                       request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken);
//这里有一个标记:context.AccessToken request.Headers.Add(“x-li-format”、“json”);//告诉LinkedIn我们想要JSON格式的结果,否则它将返回XML

解决方案就是:

 var AccessToken = await HttpContext.GetTokenAsync("LinkedIn", "access_token");
使用“LinkedIn”所需oAuth的方案