微服务 - 如何使用 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 的用户访问其他用户的资源?