当前位置: 首页 > 知识库问答 >
问题:

使用OAuth2/OpenID Connect和微服务进行身份验证和授权

西门安歌
2023-03-14

以下是不同的情况:

我的微服务A接收通过API网关并携带有效访问令牌的最终用户发起的请求(JWT,其作用域/声明对应于最终用户:用户名、id、电子邮件、权限等)。这个案子没问题。微服务拥有处理请求的所有信息。

第一个问题:如果微服务A需要调用微服务B会发生什么?

    null
    null

例如,微服务B中被调用的方法需要用户id才能工作。用户id值可以设置为查询字符串。如果使用用户访问令牌调用该方法,则微服务B可以验证查询字符串中的用户id值是否等于JWT令牌中的用户id值。如果使用服务访问令牌调用该方法,则微服务B无法验证查询字符串值,需要信任微服务A。

对于这个cas,我从OAuth2中听说了“令牌交换”草案。这个想法很有趣。它允许微服务A将用户访问令牌转换为另一个权限较小但为微服务A伪造的访问令牌。

第二个问题:如果微服务A向RabbitMQ推送消息,而微服务B接收到此消息,会发生什么?

    null
    null

你怎么看?还有其他更好的解决办法吗?

提前谢了。

共有1个答案

曾沛
2023-03-14

挺直截了当的。总有两个用例我们将称为最终用户和App2App。总是要两样都搞定。

考虑一个简化的体系结构:

         Internet                
User ----------------> Service A +-------> Service B
      HTTP request               |
                                 +-------> Service C

假设用户通过令牌进行了身份验证。jwt或其他任何东西都不重要。

         Internet                
User ----------------> Service A +-------> Service B --------> SQL Database
      HTTP request               |
                                 +-------> Service C --------> Kafka Queue
                                                                    |
                                                                    |
                                           Service X <--------------+
                                           Service Y <--------------+
                                           Service Z <--------------+

传递JWT用户令牌不适用于不能在最终用户基础上工作的中间件。尤其是数据库和队列。

数据库不处理基于最终用户的访问(队列也有同样的问题)。它通常需要专用的用户名/密码或SSL证书进行访问,这两个证书在数据库实例之外都没有任何意义。对每个表的访问是完全的读/写或只读,不可能有精细权限(有行级权限的概念,但让我们忽略它)。

因此,服务B和服务C需要分别获得对SQL数据库和Kafka队列具有写权限的功能帐户。

 类似资料:
  • 我有一个移动(本机)和Web应用程序(SPA),它与后端微服务(在核心2.0中开发)对话,以进行身份验证/授权和其他与域相关的功能,该功能已使用Opendi的配置。这两个应用程序都获得了访问令牌。我遇到的问题是,所有微服务都应该接受无记名访问令牌和登录用户的身份验证/授权(中央身份验证服务),在身份验证微服务中生成的访问令牌(开放身份验证2.*)。那么,我在微服务中缺少哪些更改,其中REST AP

  • 我们正在尝试找出IPC身份验证和授权的最佳实践。我会解释的。我们有一个基于微服务的体系结构SaaS和一个专门的认证服务。该服务负责执行身份验证和管理身份验证令牌(JWT)。 现在的问题是如何验证和授权由其他服务发起的请求(没有特定用户的上下文)? 我们是否应该为每个服务生成一个专用用户,并像对待系统中的任何其他用户一样对待它(具有适当的权限)? 我们是否应该在服务之间部署“硬编码”/动态令牌? 还

  • 在微服务中构建身份验证有几种方法。然而,使用JWT令牌和OAuth协议以及OpenID连接标识层是非常流行的。 在本教程解释如何实现这一目标时,有一个提示: 另一方面,我看到Ping标识也使用按引用传递的方法。你能帮我理解背后的道理吗?

  • 我要找的是一些别人如何解决这个问题的建议/经验。如果需要,我很乐意提供更多的信息。 为了让您更容易地给出建议,这里有两个选择的简短描述:1)使用JWT处理身份验证和授权?为什么?2)保持JWT的轻量级,并在每个微服务中向授权服务器发出请求?为什么?

  • 问题内容: 是否可以在Android应用程序中使用JAAS? 在android API 中,该包的大多数类都在说 旧版安全代码;不使用。 但是,Android上以用户为中心的JAAS可以替代吗?或者,如果我手动部署,可能会起作用吗? 问题答案: JAAS并不真正适用于Android。JAAS为基于Java的应用程序提供了以用户为中心的安全性(身份是通常正在运行应用程序的“用户”,例如LDAP用户I