当未直接获取访问令牌时,使用 .Net HttpClient 使用 Rest API 无法授权

奥兰托比

服务器是一个 .net 核心 API,它使用 Identity 进行身份验证/授权和SimpleTokenProvider来生成 JWT 令牌。特定端点需要角色授权。

[Authorize(Roles = "Admin")]

当我从不同的控制器操作方法获取令牌,将令牌保存在会话中并尝试使用该令牌调用 API 时,或者当我对从 Postman 获取的令牌进行硬编码并将其传递给 API 时,用户得到在服务器上进行了身份验证,但无法授权。

用户获得授权的唯一方法是我在同一个控制器操作方法中请求令牌。它也可以从 Postman 正常工作。

客户端代码如下:

    string token = "ew0KICAiYWxnIjogIkhTMjU2IiwNCiAg...";

    HttpClient client = new HttpClient(handler);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    HttpResponseMessage httpResponse = client.GetAsync("http://localhost:5001/api/dashboard").Result;
          if (httpResponse.IsSuccessStatusCode)
          {
             Console.Write(httpResponse.Content.ReadAsStringAsync().Result);
          }  

从服务器日志中,同一端点的授权调用具有以下内容:

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:5001/api/dashboard     
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware:Information: HttpContext.User merged via AutomaticAuthentication from authenticationScheme: Identity.Application.
    Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Information: Successfully validated the token.
    Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Information: HttpContext.User merged via AutomaticAuthentication from authenticationScheme: Bearer.
    Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization was successful for user: xxxxx.
    Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization was successful for user: xxxxx.

而未经授权的调用有以下日志:

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http://localhost:5001/api/dashboard  
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Information: Successfully validated the token.
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Information: HttpContext.User merged via AutomaticAuthentication from authenticationScheme: Bearer.
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization was successful for user: xxxxx.
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization failed for user: xxxxx.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
Microsoft.AspNetCore.Mvc.ChallengeResult:Information: Executing ChallengeResult with authentication schemes ().
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:Information: AuthenticationScheme: Bearer was forbidden.
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware:Information: AuthenticationScheme: Identity.Application was challenged.

我不知道需要向 HttpClient 添加什么其他选项才能使授权工作。

奥兰托比

使用wireshark跟踪来自HttpClient和Postman的请求的差异后,我发现.Net Identity在用户登录后设置了一个名为.AspNetCore.Identity.Application的Cookie,必须作为授权工作请求的一部分发送.

获取cookie并将其设置为后续请求的一部分后,它工作正常。

Wireshark 截图

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用OpenStack API时发生未经授权的错误,无法从Keystone获取身份验证令牌

来自分类Dev

无法使用Spotify API授权

来自分类Dev

无法使用REST API

来自分类Dev

当我尝试使用PHP访问JIRA REST API时未经授权(401)

来自分类Dev

使用JWT安全令牌访问REST API

来自分类Dev

无法通过Google API node.js SDK授权使用现有访问令牌

来自分类Dev

无法从Asp MVC 6 Web Api使用HttpClient

来自分类Dev

无法使用REST API更新jira问题

来自分类Dev

使用Identity + JWT的.NET Core 3.0无法授权

来自分类Dev

使用Python验证Sharepoint REST API时发生未授权的错误

来自分类Dev

使用REST API无法解决ServiceNow事件

来自分类Dev

气流-如何使用REST API的安全授权

来自分类Dev

无法使用TFS 2015 API。收到401未经授权的错误

来自分类Dev

无法使用C#.NET Core对ING(api.sandbox.ing.com)端点进行证书授权的API调用

来自分类Dev

为什么某些外部REST API无法从Genexus .Net使用?

来自分类Dev

Woocommerce Rest API无法正常工作401未授权

来自分类Dev

无法使用Keycloak REST API创建角色

来自分类Dev

使用httpClient.GetJsonAsync错误的Blazor Rest Api调用

来自分类Dev

无法使用HttpClient的NLog抑制Microsoft日志的API调用

来自分类Dev

无法使用RESTIFY从REST API返回JSON

来自分类Dev

使用OpenStack API时发生未经授权的错误,无法从Keystone获取身份验证令牌

来自分类Dev

无法使用或连接到Mailmans REST API

来自分类Dev

使用C#HttpClient授权POST到Vimeo API

来自分类Dev

无法使用ServiceAccountCredentials授权对Firebase的调用(REST API / python)

来自分类Dev

使用 Auth 的 API 调用无法使用 HttpClient 获取图像

来自分类Dev

使用OAuth2.0授权rest api

来自分类Dev

TopDesk:无法使用登录 API 获取授权令牌

来自分类Dev

ASP.NET MVC Core - 通过 HttpClient 使用 API

来自分类Dev

在 .net 中使用 Paypal REST api

Related 相关文章

  1. 1

    使用OpenStack API时发生未经授权的错误,无法从Keystone获取身份验证令牌

  2. 2

    无法使用Spotify API授权

  3. 3

    无法使用REST API

  4. 4

    当我尝试使用PHP访问JIRA REST API时未经授权(401)

  5. 5

    使用JWT安全令牌访问REST API

  6. 6

    无法通过Google API node.js SDK授权使用现有访问令牌

  7. 7

    无法从Asp MVC 6 Web Api使用HttpClient

  8. 8

    无法使用REST API更新jira问题

  9. 9

    使用Identity + JWT的.NET Core 3.0无法授权

  10. 10

    使用Python验证Sharepoint REST API时发生未授权的错误

  11. 11

    使用REST API无法解决ServiceNow事件

  12. 12

    气流-如何使用REST API的安全授权

  13. 13

    无法使用TFS 2015 API。收到401未经授权的错误

  14. 14

    无法使用C#.NET Core对ING(api.sandbox.ing.com)端点进行证书授权的API调用

  15. 15

    为什么某些外部REST API无法从Genexus .Net使用?

  16. 16

    Woocommerce Rest API无法正常工作401未授权

  17. 17

    无法使用Keycloak REST API创建角色

  18. 18

    使用httpClient.GetJsonAsync错误的Blazor Rest Api调用

  19. 19

    无法使用HttpClient的NLog抑制Microsoft日志的API调用

  20. 20

    无法使用RESTIFY从REST API返回JSON

  21. 21

    使用OpenStack API时发生未经授权的错误,无法从Keystone获取身份验证令牌

  22. 22

    无法使用或连接到Mailmans REST API

  23. 23

    使用C#HttpClient授权POST到Vimeo API

  24. 24

    无法使用ServiceAccountCredentials授权对Firebase的调用(REST API / python)

  25. 25

    使用 Auth 的 API 调用无法使用 HttpClient 获取图像

  26. 26

    使用OAuth2.0授权rest api

  27. 27

    TopDesk:无法使用登录 API 获取授权令牌

  28. 28

    ASP.NET MVC Core - 通过 HttpClient 使用 API

  29. 29

    在 .net 中使用 Paypal REST api

热门标签

归档