使用Postman测试REST API和Identity Server 4

x3naxklr  于 2023-03-02  发布在  Postman
关注(0)|答案(2)|浏览(276)

我有一个解决方案,其中有我的Web应用程序、REST API和Identity Server 4。所有这些现在都在.net 5上。本地一切正常,但一旦我将所有内容加载到服务器上,我就在Postman上收到错误。

设置-API和IDP服务器位于不同的站点。
我所知道的-我知道IDP服务器可以工作,因为我可以在Postman中获得令牌。我还知道实际的API可以工作,因为当我从控制器中删除[Authorize]属性时,Postman的调用可以正常工作。
问题-我现在遇到的问题是,当我将[Authorize]属性放回时,API调用总是出现401 Unauthorized错误。下面是设置身份验证的启动文件部分:

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
                .AddIdentityServerAuthentication(options =>
                {
                    options.Authority = "https://bob.com/API-IDP/";
                    options.ApiName = "BOBSAPI";
                    options.ApiSecret = "bobssecret";
                });

我还知道配置部分,使用*****的顺序是正确的。我也尝试过调整AppPool的设置,在“加载配置文件”方面,所有这些都是基于我在搜索时找到的东西。我已经去了Identity 4网站,并尽我所能遵循这些例子。哦,还有一件事。2 IDP数据库有一个持久授权表。3我确实在那个表中看到了一些记录,我认为这意味着身份验证工作了?4但是如果身份验证工作了,那为什么API调用会返回一个401呢?除了[授权]属性之外,我还需要在控制器上做什么吗?我花了3天的时间在这上面,我都快抓狂了。请帮帮我!

ojsjcaue

ojsjcaue1#

我将查看API响应的响应头,看看此头是否提供了任何线索,说明您未被授权的原因:
例如:

HTTP/1.1 401 Unauthorized
Date: Sun, 02 Aug 2020 11:19:06 GMT
WWW-Authenticate: Bearer error="invalid_token", error_description="The signature is invalid"

您还应该确保在AddJwtBearer配置中将此标志设置为True:

//True if token validation errors should be returned to the caller.
options.IncludeErrorDetails = true;

您可以使用Fiddler之类的工具来完成此操作。
然后,我将查看ASP.NET核心日志文件,以确定它为什么不接受您的令牌。
为了补充这个答案,我写了一篇博客文章,更详细地讨论了这个主题:Troubleshooting JwtBearer authentication problems in ASP.NET Core

zpgglvta

zpgglvta2#

这花了一点时间,但在Tore Nestenius的帮助下,我终于弄明白了。下面是我在最后一次测试中所做的工作:
我使用托管在测试服务器上的Identity Server 4作为授权机构。然后,我启动了本地API,这样我就可以看到控制台。我成功地获得了令牌,但当我通过Postman请求数据时,我得到了同样的关于未经授权的错误。我看了看控制台,控制台中的错误基本上是说权限与它所期望的不匹配。差别原来是一个正斜杠。一旦我在启动文件中使它们匹配,API命令就起作用了。
这个故事的寓意是确保你在启动文件中设置的权限是正确的。如果你遇到了未经授权的问题,我会先看看那里。

相关问题