Oauth 在微服务之间传递用户身份和授权
我很困惑——以异步方式在微服务之间传递用户身份(授权信息)的最佳方式是什么 假设我已经有了处理身份验证和发布JWT令牌的入口点(api网关)。然后用户使用该令牌调用某个API端点。到目前为止,一切都很清楚。现在-该端点需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。 另外-此通道是异步的(JMS/Kafka),这意味着处理可能会延迟 我还考虑了另一种情况:我们有两个服务A和B。它们都公开了外部用户可能访问的API(JWT token auth),但它们也需要异步协作(通过JMS)。它们都需要用户身份上下文。再说一遍——怎么通过 我可以:Oauth 在微服务之间传递用户身份和授权,oauth,authorization,jwt,microservices,Oauth,Authorization,Jwt,Microservices,我很困惑——以异步方式在微服务之间传递用户身份(授权信息)的最佳方式是什么 假设我已经有了处理身份验证和发布JWT令牌的入口点(api网关)。然后用户使用该令牌调用某个API端点。到目前为止,一切都很清楚。现在-该端点需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。 另外-此通道是异步的(JMS/Kafka),这意味着处理可能会延迟 我还考虑了另一种情况:我们有两个服务A和B。它们都公开了外部用户可能访问的API(JWT token auth),但它们也需要异步协作(通过JMS)。它
在这里,消费者将使用适当的凭据和客户端id直接与授权服务器联系,以获取访问令牌当您通过队列推送jwt时,为什么需要通过jwt?。队列已经只能由授权的客户端访问,您只需在客户端之间传递消息即可。队列的目的是使消息保持足够长的长度,以创建松散耦合的微服务。但是,要通过http访问api,必须传递授权标头。我想传递授权信息。用户是经过身份验证的,这是真的,但我还需要他的角色、租户上下文等…我还需要调用后续服务的能力,因此传递jwt也可以解决这个问题…如果您确实想发送jwt令牌,那么请增加到期时间(几分钟就可以了)。它应该能够承受队列不可用。只要令牌得到了适当的保护并且已经通过了安全队列通道,传递令牌就可以了。听起来合法,但是它需要MS2处理两种授权(角色)情况——一种来自外部API(jwt),另一种来自“内部API”——来自kafka侦听器的调用。我说得对吗?我的意思是-如果这是正确的方法,那么就可以了,只需要确保@redguy Spring OAuth 2.0实现可以同时支持多种授予类型。它还支持客户端凭据授予类型,但这种授予类型是否意味着不仅仅是“某个名称”?每个授予类型都有一个单独的流。不知道我是否理解你的疑问。也许你应该看看我在回答中链接的RFC。在接受答案之前,我必须阅读更多关于客户认证授予的信息。它似乎解决了我的部分问题——提供了一致的身份验证并简化了微服务配置。至于传递用户上下文,我决定在使用客户机凭据grant调用用户上下文的userId call auth api服务时,只传递userId和目标服务。