如何从ASPNET核心控制器获取JWTToken?

问题描述:

我试图做一个受保护的API的请求,所以我需要一个授权请求头添加到HttpClient的是这样的:如何从ASPNET核心控制器获取JWTToken?

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token"); 

但如何获得认证令牌(“您的OAuth令牌”)从控制器?

PS:我已经通过了身份验证服务器4的验证。 在AspNetCore中开发的应用程序。

全码:

[Authorize] //Already authenticated 
    public IActionResult SomeControllerAction() 
    { 
     var claimsIdentity = User.Identity as ClaimsIdentity; //where is JWTToken?? 
     var JWTTokne = "how to get?"; 

     using (var client = new HttpClient()) 
     { 
      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", JWTTokne); 
      var result = client.PostAsync("someurl", new StringContent(json, Encoding.UTF8, "application/json")).Result; 
      //more code to handle result.... 
     } 

     return View(); 
    } 
+0

是控制器动作的[授权]一个? IOW是使用在请求中发送授权标头的客户端调用的控制器? – Lutando

+0

是的,它是已授权的已经过身份验证的操作。 – user1203003

你可以看一下在HTTP上下文,因为你在一个控制器是你可以得到头中的令牌在HttpContext.Request.Headers["Authorization"]。这显然只适用于客户端在请求中放置该头部的情况。

您可以通过使用获得访问令牌:

// Get the access token. 
var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 

var client = new HttpClient(); 

// Set the access token as the bearer token (Authorization header of the request). 

client.SetBearerToken(accessToken); 

核心

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token"); 

有关的access_token在MVC 5控制器我用

var token = (User as ClaimsPrincipal).FindFirst("access_token").Value 

在受保护的web API 2(没核心)我用的方法

var access_token = ControllerContext.Request.Headers.Authorization.Parameter; 

使用AspNet Core 2.0和新的身份验证系统,您只需使用HttpContext的ontop扩展方法即可。

HttpContext context; 
await context.GetTokenAsync("access_token") 

并在MVC控制器

public class MyController : Controller 
{ 
    public IActionResult Get(){ 
     var token = await HttpContext.GetTokenAsync("access_token"); 

    } 

}