将解码的 JWT 有效负载传递给微服务

Posted

技术标签:

【中文标题】将解码的 JWT 有效负载传递给微服务【英文标题】:Pass decoded JWT payload to micro services 【发布时间】:2018-03-17 22:58:39 【问题描述】:

我们正在更改我们的应用程序身份验证架构以切换到 Json Web Token。

实际上,传入的请求首先通过一个 API 网关,该网关将请求分派到我们堆栈的各种微服务。

每个请求中传递的 JWT 的认证和验证都是在网关中完成的。

认证后你会用 JWT 做什么?

    将其“原样”传递给后续微服务? 在网关中对其进行解码,仅将解码后的有效负载传递给服务?

我看到两种解决方案的优缺点:

    专业人士:我们一直保留一个标准的 Authentification http 标头。 缺点:我们必须在每个服务中解码令牌。

    专业人士: Token 已经解码并可以直接在服务中使用。 缺点:我们必须使用非标准的 http 标头来传递解码后的有效负载。

在这种情况下有什么“标准”方式吗?

你有什么意见?

谢谢!

【问题讨论】:

将 JWT 保存在 cookie 中。默认情况下,它在每个请求中作为标头传递给服务器。然后您可以在服务器请求处理程序中对其进行解码。 令牌将存储在客户端(SPA 应用程序)的 cookie 中,并在每次请求时传递给 API 网关。网关将对其进行验证并接受/拒绝请求。如果请求被接受,令牌将被传递到底层微服务。我的问题是:身份验证后,我应该将 JWT 令牌直接传递给服务,还是只传递解码的 JWT 有效负载?我知道两者都可以,但我想知道是否有任何“最佳实践”。 【参考方案1】:

按原样传递 JWT。解码的开销可以忽略不计,但如果您的网关因某种原因被绕过,您可以使系统更加安全。或者,也许您将来决定直接与您的微服务通信。

【讨论】:

以上是关于将解码的 JWT 有效负载传递给微服务的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JJWT 从有效负载中获取自定义字段

如何使用 Keycloak 解码 JWT

真的有必要在 JWT 中内置有效负载吗?

使用 RS256 生成的 JWT 可以被 jwt.io 网站解码吗?

用户登录鉴权JWT代码实现

用户登录鉴权JWT代码实现