【问题标题】:Rails: Microservice architecture with dedicated authorization service and app services using Knock (JWT)Rails:具有专用授权服务和使用 Knock (JWT) 的应用程序服务的微服务架构
【发布时间】:2017-08-14 10:03:32
【问题描述】:

我现在正在尝试将单体应用程序分离为微服务(专用 Rails 应用程序)并想知道 - 是否有解决方案可以将授权服务从每个服务中移出?

例如,我有 6 个不同的 Rails API 服务,它们带有用于身份验证的用户模型的“knock”gem。 所有这些服务共享一个用户数据库。

我想用用户模型实现专用服务,但是其他服务如何使用给定令牌验证用户?

我还希望能够控制用户可以使用和不可以使用的服务。那么应该有AccessRole服务吧?

案例草案:

  1. 用户转到“文章”(前端 UI 客户端)
  2. auth_service 正在验证来自客户端的令牌
  3. access_service 以某种方式从 auth_service 收到消息,并验证用户的角色以访问“文章”资源。
  4. articles_service 使用 json 数据向客户端发送响应。

这里还有一些问题:

  1. access_service 将如何与 auth_service 通信?他们是否应该使用一个用户数据库来验证用户的凭据和角色?
  2. articles_service 等等 - 它们是否应该成为无法访问公共的私有服务并充当用户的黑匣子?

【问题讨论】:

    标签: ruby-on-rails ruby jwt microservices


    【解决方案1】:

    我一直在解决这个问题,但没有任何好的文档解决方案。我要做的是构建一个管理用户和您的访问控制列表 (ACL) 的服务。

    1. 身份服务 - 这是客户端授权自己访问 API 中其他服务的地方。

    login [POST] email password

    这将返回一个 JWT 令牌,该令牌在有效负载部分将包含以下信息:

    1. 用户 ID
    2. ACL

    ACL 可以是他们拥有的允许角色的数组。这样,当客户端向 API 发出请求时,响应请求的服务可以自省用户 ID(敲门 - current_user),然后您可以从有效负载中获取 ACL。我认为很容易然后添加before_action 来验证适当的角色。

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 2017-12-09
      • 1970-01-01
      • 2019-06-26
      • 2018-09-03
      • 1970-01-01
      • 2015-07-15
      • 2020-10-11
      • 2021-02-17
      相关资源
      最近更新 更多