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)
您可以使用以下方式获取访问令牌:
// 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)
您可以查看 HTTP 上下文,因为您位于控制器中,您可以从 处的标头获取令牌HttpContext.Request.Headers["Authorization"]
。显然,只有当客户端将该标头放入请求中时,这才有效。
归档时间: |
|
查看次数: |
17426 次 |
最近记录: |