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

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

我试图向受保护的API发出请求,因此我需要向HttpClient添加授权请求头,如下所示:

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是否使用已在请求中发送授权标头的客户端调用控制器?是的,它已被授权执行已验证的操作。