使用 Postman 进行 REST API 和 Identity Server 4 测试

REST API and Identity Server 4 testing with Postman

我有一个解决方案,它包含我的 Web 应用程序、我的 REST API 和我的身份服务器 4。所有这些现在都在 .net 5 上。在本地一切正常,但是一旦我加载所有内容到服务器,我在 Postman 上收到错误消息。

设置 - API 和 IDP 服务器位于不同的站点。

我所知道的 - 我知道 IDP 服务器可以工作,因为我可以在 Postman 中获得令牌。我也知道实际的 API 有效,因为当我从我拥有的控制器中删除 [Authorize] 属性时,来自 Postman 的调用工作正常。

问题 - 我现在遇到的问题是,当我放回 [Authorize] 属性时,我总是收到 [=28= 的 401 Unauthorized 错误] 称呼。以下是设置身份验证的启动文件部分:

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

我也知道 Configure 部分,Use***** 的顺序是正确的。我还尝试根据“加载配置文件”调整 AppPool 设置,所有这些都基于我在搜索时发现的内容。我已经访问了 Identity 4 网站并尽可能地遵循这些示例。哦,还有一件事。 IDP 数据库有一个 table 用于 PersistedGrants。我确实在 table 中看到了一些记录,我认为这意味着身份验证有效?但是,如果身份验证有效,那么为什么 API 调用 return 401?除了 [Authorization] 属性之外,我还需要在控制器上做些什么吗?我已经在这上面花了 3 天时间,而且我正在拔头发。请帮忙!

我会查看来自 API 的回复的回复 header 并查看此 header 是否提供任何线索说明您未被授权的原因:

例如:

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 核心日志文件以确定它不接受您的令牌的原因。

花了一点时间,但在 Tore Nestenius 的帮助下,我终于弄明白了。以下是我在最终测试中所做的工作:

我使用托管在我们测试服务器上的 Identity Server 4 作为权限。然后,我启动了本地 API,这样我就可以看到控制台了。拿到token成功了,但是去postman请求数据的时候,同样报未授权的错误。我查看了控制台,控制台中的错误基本上是说权限与预期不符。差异原来是一个正斜杠。一旦我在我的启动文件中使它们匹配,API 命令就起作用了。

这里故事的寓意是确保您在启动文件中设置的权限是正确的。如果您遇到未经授权的问题,我会先看看那里。