使用机器对机器和基于用户的身份验证使用 JWT 进行嵌套身份验证和授权是一回事吗?

Posted

技术标签:

【中文标题】使用机器对机器和基于用户的身份验证使用 JWT 进行嵌套身份验证和授权是一回事吗?【英文标题】:Is nested authentication and authorization with JWT using both machine-to-machine and user-based auth a thing? 【发布时间】:2021-10-14 12:53:59 【问题描述】:

像我五岁一样向我解释。

在使用基于用户的身份验证的同时使用机器对机器的身份验证是否很典型?含义:如果我有一个接受用户请求的网关或代理,并且它在处理或将请求转发到应用程序服务器之前验证用户请求附带的 JWT 是正常的,还是误用期望使用机器对机器 JWT 以确保到达应用程序服务器的请求源自网关?此外,在向应用程序服务器发出请求时,将用户的 JWT 包装或嵌套在机器对机器 JWT 中是正常的还是误用?

让网关验证 JWT 签名和声明并根据需要将其转发到各种应用程序服务器是不是更典型?

希望以这种方式嵌套 JWT 是不是有点矫枉过正,还是“你搞错了”的一些误用/案例?

【问题讨论】:

【参考方案1】:

如果您有一堆通过网关调用的后端微服务,那么通常会转发原始访问令牌 - 这会为您的 API 提供用户上下文,以便它们可以正确授权。

更好地使用反向代理是为那些拥有丰富声明的人交换机密令牌 - 请参阅 Phantom Token Approach 了解其工作原理。

另请注意,建议每个单独的 API 验证 JWT - 这通常被描述为 Zero Trust Architecture,它可以防止中间人利用。

【讨论】:

感谢这些链接 - 我一直在寻找一些东西 - 一些术语来向我组织内的其他人解释我们可能希望在保留用户上下文的同时构建 JWT 使用的内容或方式。 酷 - Scope 和 Claims 文章也可能有用,因为它们是相关的。这一切的结果当然应该是简单的代码。

以上是关于使用机器对机器和基于用户的身份验证使用 JWT 进行嵌套身份验证和授权是一回事吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring 和 JWT 进行基于令牌的身份验证

使用特定机器对域进行身份验证?

基于角色的 jwt 授权

如何使用基于 JWT 令牌的 express 获取经过身份验证的用户信息

如何使用 Apache Shiro 实现基于 JWT 令牌的身份验证机制?

如何基于使用 Oauth2 协议的身份验证改进 JWT 访问令牌和刷新令牌?