如果想要确保 JWT 在各个微服务中进行有效传播,需要怎么做?

396 阅读2分钟

如果想要确保 JWT 在各个微服务中进行有效传播,需要怎么做?

API 网关统一验签方案

authenticate-external-users-for-api-invocation.png

API 网关统一验签与服务端验签最大的区别是在 API 网关层面就发起 JWT 的验签请求,之后路由过程中附加的是从认证中心返回的用户与权限数据,其他的操作步骤与方案一是完全相同的。

在微服务架构下,通常有单独一个服务Auth去管理相关认证,为了安全不会直接让用户访问某个服务,会开放一个入口服务作为网关gateway,只允许外网网关,所有请求首先访问gateway,由gateway将请求路由到各个服务,那么我们通常的做法在网关里进行请求拦截,来保证项目安全性(采用非对称加密算法,利用私钥在auth加密,公钥在网关gateway中解密,由此来减轻auth压力)。

API 网关统一验签适合用在传统的企业应用,可以让程序员专心开发业务逻辑,同时程序也更容易维护。

JWT授权流程如下:

workflow_jwt.png

  1. 最终用户登录后,客户端应用程序向API Gateway或任何第三方JWT发行者发送身份验证请求,以获得JWT令牌。
  2. 如果API Gateway是JWT发行者,那么它将验证用户或应用程序。如果用户或应用程序凭据有效,API Gateway使用JWT配置中指定的私钥生成JSON令牌,并将生成的令牌发送给客户端。
  3. 客户端将HTTP授权请求报头中生成的JSON令牌作为承载令牌发送,以访问API Gateway中受保护的API。
  4. API Gateway首先根据来自JWT的声明识别应用程序,然后使用颁发者(颁发者可以是API Gateway或第三方颁发者)的公共证书验证JWT,并提供对受保护资源的访问。

如果验证失败,API Gateway返回一个特定的错误响应。

Note: 如果API Gateway已经生成了JSON令牌,它将使用JWT配置中指定的公共证书来验证签名。否则,如果HTTP请求是从第三方JWT发行者发送的,API Gateway会使用发行者的公共证书或JWKS URI验证令牌。