gpt4 book ai didi

spring-security - 微服务到微服务调用,来自队列消息的授权

转载 作者:行者123 更新时间:2023-12-04 02:20:40 24 4
gpt4 key购买 nike

上下文:我正在创建一个云平台来支持具有 SSO 的多个应用程序。我正在使用 用于身份验证的 Keycloak Netflix Zuul 授权 (API 网关)通过 Keycloak Spring 安全适配器 .

每个微服务都需要一个 Authorization header ,其中包含一个有效的 JWT,它将从中获取用户名 (sub) 来处理请求。每个微服务到微服务的调用都应该首先通过 Netflix Zuul,传递 Authorization header 以维护无状态验证。该策略允许每个微服务知道谁是间接调用微服务的用户(子)。

问题/问题 1:如果从队列消息调用微服务会发生什么?我的一个想法是将与消息 + userInfo 相关的信息存储在队列中,然后创建一个专用的微服务来处理这种消息,这种特殊的微服务应该从队列中读取 userInfo 并处理消息.

UPDATE 1: Per an email reply from another forum, storing the JWT in a queue isn't a good idea, since it could be mined easily.



问题/问题 2:但是,如果之前的特殊微服务想要调用另一个期望在 header 中接收 JWT 的普通微服务,会发生什么?这个特殊的微服务是否应该自己创建一个 JWT 来模拟用户并能够调用常规微服务?

我想到的另一个解决方案是将原始 JWT 存储在队列中,但是,如果队列稍后调用特殊微服务会怎样?就在 JWT 不再有效(它已过期)并且被调用的微服务将拒绝请求之后?

可能的解决方案: (根据 João Angelo 讨论更新,见下文)

I should authenticate the requests from my users (Authorization code flow) and my services (Client credentials grant), both requests should contain user information in the payload. When the request it comes from the user, I need to validate that the payload user info match with the JWT claims. When the request comes from a service, I just need to trust in that service (as long as it is under my control).



我将非常感谢您的帮助。谢谢。

最佳答案

免责声明 :我从未使用过 Keycloak,但标签 wiki 说它符合 OAuth2,所以我相信该信息。

在一个真正的高级 View 中,您似乎有两个要求:

  • 验证最终用户在使用您的系统时触发的操作。
  • 验证由您的系统在未知时间触发的操作,并且不需要最终用户在线。

  • 您已经遇到了第一个,依靠基于 token 的身份验证系统和 对于第二点,我会做完全相同的事情,唯一的区别是 token 将使用 OAuth2 客户端凭据授予 颁发给您的系统。而不是针对有最终用户的场景的其他赠款。

    Client Credentials Grant

    (来源: Client Credentials Grant)

    在您的情况下,Keycloak 将扮演 Auth0 的角色,您的客户端应用程序是微服务,它们可以维护用于在授权服务器中进行身份验证并获取访问 token 的客户端 secret 。

    要记住的一件事是,如果您的系统依赖于 sub要求的不仅仅是身份验证和授权,那么您可能需要进行一些调整 .例如,我见过执行操作 A 需要知道它是针对用户 X 和 Y 的系统,但该操作的有效负载仅接收用户 Y 并假定用户 X 是当前经过身份验证的主体。当一切都是同步的时,这工作正常,但仅通过切换有效负载来指定两个用户将意味着该操作可以由系统身份验证的主体异步完成。

    关于spring-security - 微服务到微服务调用,来自队列消息的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40458770/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com