我有一个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中也不重要。
注意:常规身份验证甚至通过角色进行授权都可以。
1条答案
按热度按时间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
团队提交一个票证,因为我无法控制此行为。