gpt4 book ai didi

microservices - 使用微服务架构构建身份验证

转载 作者:行者123 更新时间:2023-12-04 07:37:53 26 4
gpt4 key购买 nike

我正在开发一个带有微服务的应用程序,但我不知道如何分发微服务以允许身份验证。

我读过每个微服务都应该有自己的数据库以避免耦合。

问题是身份验证(通过 JWT)和用户微服务必须有权访问相同的数据库和表(用户)。我想这个问题之前已经解决了,因为类似的应用程序必须处理同样的问题。

我该如何解决这个问题?

最佳答案

JWS (JWT 的签名版本)是一个完美的例子,因为它被认为是类似的场景:

  • 你有一个 认证应用程序:每次登录都会经过(signin.domain.com),一旦您验证了用户的凭据,您就会发出通过 生成的 token 私钥
  • 每个服务( service1.domain.comservice2.domain.com )可以实现一个中间件,而不是 授权 : 您的所有服务都将收到 公钥 并且将能够通过该 key 验证 token 的真实性。他们不需要数据库,因为他们需要验证的是 token 是否有效,而不是用户是否存在等等。

  • 为了澄清我的最后一句话:您可能应该发行非常短暂的 token 。在这一点上,说:
  • 用户 X 登录
  • 他的 token 有效期为十分钟
  • 用户 X 删除了他的帐户,但仍然有一个有效的 token
  • 然后他点击service.domain.com

  • service.domain.com在您需要与实际访问数据库的 API 交互(即添加新用户地址)之前,您仍会认为他已登录。此时,负责写入数据库的服务将抛出异常,指出用户不存在,您可能会捕获它并将用户注销。所有这些都可以进行调整/微调,但您大致了解它是如何工作的。

    回到 JWT 及其用法,我不知道您是否熟悉 PHP,但这是一个 pretty straightforward example .

    如果你想变得花哨,你可以使用 nginx 作为中间件,并有类似 auth module 的东西。为你做授权。

    最后但并非最不重要的一点是,我们在这里只介绍了身份验证:要进行授权,您可能希望在每个服务中从 token 中读取用户的角色(假设您在用户登录后将它们保存在那里 - 但这有点缺陷,好像用户失去了一个角色,然后他的 token 仍然会列出它)或简单地调用 signin.domain.com/users/me从每个服务中检索最新的用户角色列表,然后检查是否允许他对该特定服务执行某些操作。

    哦,请记住,您永远不应该将敏感数据放在 JWT/JWS 中,因为它们可以被解码。所以是的,您可以将用户角色添加到 JWT,但例如,永远不要在其中保存密码或其他明文 token 。

    希望这可以帮助!

    关于microservices - 使用微服务架构构建身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046924/

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