如何从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();
}
答
你可以看一下在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");
}
}
是控制器动作的[授权]一个? IOW是使用在请求中发送授权标头的客户端调用的控制器? – Lutando
是的,它是已授权的已经过身份验证的操作。 – user1203003