如何从 ASPNET Core 控制器获取 JWTToken?

Ren*_*Str 9 c# asp.net-core identityserver4 asp.net-core-identity

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

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");
Run Code Online (Sandbox Code Playgroud)

但是如何从控制器获取身份验证令牌(“您的 Oauth 令牌”)?

PS:我已经通过了 Identity Server 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();
    }
Run Code Online (Sandbox Code Playgroud)

ozg*_*rci 19

核:

var accessToken = await HttpContext.Authentication.GetTokenAsync("access_token");
Run Code Online (Sandbox Code Playgroud)

或这个:

var token = Request.Headers["Authorization"];
Run Code Online (Sandbox Code Playgroud)

对于 MVC 5 控制器中的 access_token 我使用:

var token = (User as ClaimsPrincipal).FindFirst("access_token").Value
Run Code Online (Sandbox Code Playgroud)

在受保护的 Web api 2(非核心)方法中,我使用了:

var access_token = ControllerContext.Request.Headers.Authorization.Parameter;
Run Code Online (Sandbox Code Playgroud)


Jay*_*Ess 5

您可以使用以下方式获取访问令牌:

// 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);
Run Code Online (Sandbox Code Playgroud)


Lut*_*ndo 2

您可以查看 HTTP 上下文,因为您位于控制器中,您可以从 处的标头获取令牌HttpContext.Request.Headers["Authorization"]。显然,只有当客户端将该标头放入请求中时,这才有效。