oauth-2.0 Keycloak,Nestjs - ResourceGuard总是导致403禁止错误?

nwlqm0z1  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(188)

我有一个NestJS REST API。我尝试使用Keycloak作为授权服务。我想用资源、作用域和权限来保护我的REST API的端点。
问题是,我每次请求都收到403禁止资源错误。我试图用很多图片来解释我的整个配置。我是遗漏了什么还是误解了什么?

Keycloak配置

**客户端配置:**x1c 0d1x
我的测试资源:

我的策略:

我的权限:

评估为了测试我的配置,我使用了内部评估工具。我的用户是:“testcustomer”是以下组的成员:Testproject。因此他应该可以访问该资源。评估显示,它工作正常:x1c4d 1x指令集

REST API:

在我的NestJs REST API中,我使用的是nest-keycloak-connect-包。
这是KeycloakModule的配置:

我的测试控制器


指令集
我对包的理解:当用户(在本例中为testcustomer)将请求发送到以下URI的API时:“http://localhost:3002/api/test/test”,来自Keycloak的资源与之关联。并且testcustomer被授权调用此端点。其他不在Testproject组中的用户将收到403禁止响应。
问题是,无论我的用户是否在组中,我总是得到一个403错误,甚至资源是否存在于Keycloak中也不重要。
注意:常规身份验证甚至通过角色进行授权都可以。

bbmckpt7

bbmckpt71#

多亏了包裹的主人,我得到了答案:
https://github.com/ferrerojosh/nest-keycloak-connect/issues/137
他的回答/解决方案:
啊,我想这是因为你的瞄准镜里有:字符。
如果您想到官方keycloak-connect库中的文件:https://github.com/keycloak/keycloak-nodejs-connect/blob/f8e397cd7a1a763db5a45a07c3c3e40fec5cf8f2/middleware/enforcer.js#L18-L33
它通过简单地拆分:来拆分权限permission:scope
这里发生的情况是,底层keycloak-connect库接收到一个字符串File:files:read,并将其作为范围为files的资源File发送到keycloak实施器。
tldr;解决方案是删除您的作用域中的:字符。如果您不喜欢这样,您可以向keycloak-connect团队提交一个票证,因为我无法控制此行为。

相关问题