微服务 - 如何使用 JWT 对单独的 API 微服务进行身份验证

Posted

技术标签:

【中文标题】微服务 - 如何使用 JWT 对单独的 API 微服务进行身份验证【英文标题】:Microservices - How to authenticate separate API Microservice with JWT 【发布时间】:2020-05-02 16:00:52 【问题描述】:

我正在尝试在 spring boot(java) 中构建一个微服务。

我正在使用 Java 中的微服务开发应用程序。我已经构建了一个 auth api,它处理通常的注册登录等,它发出 JWT(内置 java spring boot,mysql

如何使用这些来保护用 Java、spring boot 和 MongoDB 编写的单独 API 微服务中的路由?


例子:

Service1 -(使用rest Webservice + MySQL)用于登录/注册,如果用户提供正确的用户名和密码,那么他正在获取JWT令牌

Service2 - (使用rest Webservice + MongoDB)为了在网站上发布数据,在发布或调用该服务的API之前,用户必须提供他们从服务1获得的有效JWt令牌。

所以我的问题是,如果用户将 jwt 令牌(从 service1 获得)传递给 service2,那么我如何验证 service2 上的令牌是否有效并且特定于使用他们的凭据创建的用户 ID

【问题讨论】:

【参考方案1】:

您可以为您的身份验证服务(服务 1)创建一个新的 REST 端点,例如 /user/authenticate,它将接收 JWT 令牌作为请求标头中的不记名令牌。使用此端点,您将验证用户和 JWT 令牌的有效性,并根据有效性返回 True/False。

因此,当用户使用 JWT 向服务 2 请求时,您首先使用给定的 JWT 调用 /user/authenticate,如果 JWT 有效,您可以从服务 2 为用户提供他想要的服务,否则,拒绝请求。

另一种方法是,您可以在服务 2 中添加一个新功能,以解码 JWT 并使用您用于编码令牌的 JWT 加密密钥检查有效性。因此,当用户从服务 2 请求某些内容时,您首先调用该函数并验证用户的 JWT 并继续处理请求。

【讨论】:

以上是关于微服务 - 如何使用 JWT 对单独的 API 微服务进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

JWT 是不是应该是一个单独的身份验证微服务,而不是与后端业务逻辑坐在一起?

微服务授权。如何防止具有有效 JWT 的用户访问其他用户的资源?

验证 API 密钥和 JWT 令牌是微服务的责任吗?

使用 JWT 的微服务认证和授权

如何从 Spring Boot 应用程序调用外部 JWT API 服务 [关闭]

有没有一种方法可以在不使用 APi 网关架构的情况下使用 Jwt 保护微服务端点