背景:我正在创建一个支持SSO的多个应用程序的云平台.我正在使用Keycloak进行身份验证,使用Netflix Zuul通过Keycloak Spring Security Adapter 进行授权(API Gateway).
每个微服务都需要一个Authorization标头,其中包含一个有效的JWT,它将从中获取用户名(sub)来处理请求.每个微服务到微服务调用应首先通过Netflix Zuul,传递Authorization标头以维持无状态验证.该策略允许每个微服务器知道谁是间接调用微服务的用户(子).
问题/问题1:如果从队列消息中调用微服务会发生什么?我的一个想法是在队列中存储与消息+ userInfo相关的信息,并创建一个专用的微服务来处理这种消息,这种特殊的微服务应该从队列中读取userInfo并处理消息.
更新1:根据另一个论坛的电子邮件回复,将JWT存储在队列中并不是一个好主意,因为它可以轻松挖掘.
问题/问题2:但是,如果之前的特殊微服务想要调用另一个期望在头中接收JWT的普通微服务会发生什么?这个特殊的微服务是否应该由他自己创建一个JWT模仿用户并能够调用常规的微服务?
我认为另一种解决方案是将原始JWT存储在队列中,但是,如果队列稍后调用特殊微服务会发生什么?就在JWT不再有效(它已过期)之后,被调用的微服务将拒绝该请求?
可能的解决方案:(根据JoãoAngelo的讨论更新,见下文)
我应该验证来自我的用户(授权代码流)和我的服务(客户端凭证授权)的请求,这两个请求都应该包含有效负载中的用户信息.当请求来自用户时,我需要验证有效负载用户信息是否与JWT声明匹配.当请求来自服务时,我只需要信任该服务(只要它在我的控制之下).
我非常感谢你的帮助.谢谢.
我开始测试Grails(版本2.2.4).
当我运行:grails test-app
我有:
Error Compilation error compiling [unit] tests: startup failed:
Run Code Online (Sandbox Code Playgroud)
日志:
/myproject/test/unit/app/AutocompleteServiceTests.groovy: 11: Only classes and closures can be used for attribute 'value' in @grails.test.mixin.TestFor
@ line 11, column 10.
@TestFor(AutocompleteService)
/myproject/test/unit/app/CoachControllerTests.groovy: 11: Only classes and closures can be used for attribute 'value' in @grails.test.mixin.TestFor
@ line 11, column 10.
@TestFor(CoachController)
Run Code Online (Sandbox Code Playgroud)
我有21个错误,每个错误*Test.groovy文件.
我尝试过:grails clean之前,但我有同样的错误.
当我创建新的域,控制器或服务时,Grails会自动创建测试文件.
我正在尝试连接 Spring App Keycloak,但出现此错误:
在我进入我的应用程序并被重定向到 Keycloak 进行身份验证后,我在浏览器中收到一个错误:
192.168.1.66 redirected you too many times.
Run Code Online (Sandbox Code Playgroud)
完整网址
URL: http://192.168.1.66:9092/keycloak-sp-example/sso/login?state=139%2F1ed115fb-4d4f-468c-9a72-845f9cfa9cdb&code=PVGhg5X28G8fjNt36tMGHTJIP7CQdHOhoK4XhPgUh3E.2d885db5-5c4f-43b1-9095-305494718a97
Run Code Online (Sandbox Code Playgroud)
而且,在控制台中,我得到:
ERROR org.keycloak.adapters.OAuthRequestAuthenticator - failed verification of token: Token is not active.
Run Code Online (Sandbox Code Playgroud)
这是一个错误?或者我应该在控制台中配置什么?