我有一个解决方案,其中有我的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天的时间在这上面,我都快抓狂了。请帮帮我!
2条答案
按热度按时间ojsjcaue1#
我将查看API响应的响应头,看看此头是否提供了任何线索,说明您未被授权的原因:
例如:
您还应该确保在AddJwtBearer配置中将此标志设置为True:
您可以使用Fiddler之类的工具来完成此操作。
然后,我将查看ASP.NET核心日志文件,以确定它为什么不接受您的令牌。
为了补充这个答案,我写了一篇博客文章,更详细地讨论了这个主题:Troubleshooting JwtBearer authentication problems in ASP.NET Core
zpgglvta2#
这花了一点时间,但在Tore Nestenius的帮助下,我终于弄明白了。下面是我在最后一次测试中所做的工作:
我使用托管在测试服务器上的Identity Server 4作为授权机构。然后,我启动了本地API,这样我就可以看到控制台。我成功地获得了令牌,但当我通过Postman请求数据时,我得到了同样的关于未经授权的错误。我看了看控制台,控制台中的错误基本上是说权限与它所期望的不匹配。差别原来是一个正斜杠。一旦我在启动文件中使它们匹配,API命令就起作用了。
这个故事的寓意是确保你在启动文件中设置的权限是正确的。如果你遇到了未经授权的问题,我会先看看那里。