【问题标题】:Looking for JWT Auth microservice example寻找 JWT Auth 微服务示例
【发布时间】:2018-04-10 22:55:19
【问题描述】:

我想使用 NodeJS、Mongo 和 JWT 构建身份验证/授权服务。该服务将是一个微服务,它不仅在允许请求之前处理来自我的 API 网关的请求,还处理来自可能想要检查身份验证和角色的其他服务的请求。我假设所有其他服务都将使用此身份验证服务来验证 JWT 以及角色等。

希望这张图能更好地解释我在寻找什么。

谁能给我指出一个资源,可以帮助我学习如何使用 NodeJS 做到这一点?

【问题讨论】:

    标签: node.js authorization jwt microservices


    【解决方案1】:

    如果您只有一个客户端应用程序,那么您可以执行以下步骤

    • 制作一个用于身份验证的微服务,生成 jwt 令牌。

    • jwt 在其有效负载中包含所有基本用户信息,即角色、用户 ID 等。

    • jwt 令牌将在每个授权请求的 Authorization 标头中发送。

    • 在处理任何请求之前,您可以使用中间件验证和解码 jwt 令牌。现在您可以在 req 对象中轻松设置用户的信息,并且可以轻松地在控制器中访问用户角色及其 id。

    • 如果令牌无效,那么您可以在中间件中抛出错误,它会提供未经授权的 json 响应。

    • 您可以调用身份验证 API 来验证和解码您的令牌,也可以在中间件的每个微服务中编写 3 到 4 行代码。

    这里有一些jwt的示例实现链接,你应该按照上面的步骤自定义这些示例代码。

    5-steps-to-authenticating-node-js

    authenticate a nodejs api with json web tokens

    如果您有多个客户端应用程序

    • 您应该使用提供单点登录解决方案的 openid 连接标准来验证具有相同用户名和密码的多个应用程序。

    • here 是一个 openid 连接游乐场,用于了解授权流程。

    【讨论】:

    • @sonoerin 我已经解释了一些步骤,如果你有疑问或者这是否是你的用例,请告诉我。
    • 谢谢,我将开始研究如何将 JWT 与单个客户端和多个服务一起使用,这些服务在 AuthorizationHeader 中的服务和 UI 之间传递 JWT。
    • 关于在中间件中的每个微服务中解码 JWT 的最后一点,我们需要与每个微服务共享密钥,不是吗?可以吗?什么是这样做的好方法?
    • 是的,我们需要与每个微服务共享密钥,最好的方法是提供包含公钥的 jwks url。可以参考here
    • @gaurav5430 解码 JWT 不需要任何密钥。但是如果你想验证 jwt。它将需要公钥。身份验证服务器应该有一个检查 jwt 有效性的端点。在这种情况下,只需使用提供的密钥调用身份验证服务器就可以了。它需要往返,但如果身份验证服务在同一个集群中,应该基本没问题。
    猜你喜欢
    • 2014-04-30
    • 2019-01-07
    • 2016-07-19
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 2020-08-17
    • 1970-01-01
    相关资源
    最近更新 更多