C# 如何从ASPNET核心控制器获取JWTToken?
我试图向受保护的API发出请求,因此我需要向HttpClient添加授权请求头,如下所示:C# 如何从ASPNET核心控制器获取JWTToken?,c#,asp.net-core,identityserver4,asp.net-core-identity,C#,Asp.net Core,Identityserver4,Asp.net Core Identity,我试图向受保护的API发出请求,因此我需要向HttpClient添加授权请求头,如下所示: client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token"); 但是如何从控制器获取身份验证令牌(“您的Oauth令牌”) PS:我已经通过身份服务器4的身份验证。 在AspNetCore中开发的应用程序 完整代码: [Authorize] //Al
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”]
的头中获取令牌即可。显然,这仅在客户端将该标头放入请求中时有效。您可以查看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);
您可以使用以下方式获取访问令牌:
// 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 token = Request.Headers["Authorization"];
对于我使用的MVC 5控制器中的access_令牌:
var token = (User as ClaimsPrincipal).FindFirst("access_token").Value
在我使用的受保护web api 2(非核心)方法中:
var access_token = ControllerContext.Request.Headers.Authorization.Parameter;
核心:
或者这个:
var token = Request.Headers["Authorization"];
对于我使用的MVC 5控制器中的access_令牌:
var token = (User as ClaimsPrincipal).FindFirst("access_token").Value
在我使用的受保护web api 2(非核心)方法中:
var access_token = ControllerContext.Request.Headers.Authorization.Parameter;
有了aspnetcore2.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");
}
}
有了aspnetcore2.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是否使用已在请求中发送授权标头的客户端调用控制器?是的,它已被授权执行已验证的操作。该控制器操作是否为[授权]操作?IOW是否使用已在请求中发送授权标头的客户端调用控制器?是的,它已被授权执行已验证的操作。