如何在 api 网关架构中获取 JWT 令牌

Posted

技术标签:

【中文标题】如何在 api 网关架构中获取 JWT 令牌【英文标题】:how to obtain JWT token in a api gateway architecture 【发布时间】:2021-11-06 21:26:12 【问题描述】:

目前正在做一些研究以设置具有 oauth (jwt 令牌) 安全性的 (azure) api 网关。

外部合作伙伴/应用程序向网关上发布的 api 端点发送请求,其中包括由网关针对 AzureAD 验证的标头中的有效 JWT 令牌。验证后,请求将路由到后端服务。这里没有问题。

我的问题是,外部应用程序获取 JWT 令牌(用于 api 调用)的最佳做法是什么? 显然,它可以使用 clientid+secret 向 AzureAD 发送请求,以获取有效的 JWT 令牌。但要这样做,它必须直接调用我的内部 AzureAD 吗?这是这样做的方法吗?

或者我应该在我的 api 网关上公开一个“get-jwt-token”api 并将该请求路由到 AD 吗?我应该如何保护该 API?使用基本身份验证?

或者我错过了什么,是否有更好的最佳/经过验证的做法?

【问题讨论】:

【参考方案1】:

托管最佳实践

反向代理或 API 网关放置在 API 和授权服务器 (AS) 的前面。这可确保以某种方式获得对后端入口点的访问权限的攻击者无法访问数据源。

获取令牌的 OAUTH 请求

OAuth 请求通常通过反向代理/API 网关直接代理到 AS,无需额外逻辑。所有凭据、登录尝试审核等都保留在 AS 中。

托管服务

如果将 Azure AD 用作云托管 AS,这是一种特殊情况:系统已经针对 Internet 客户端进行了强化,因此大多数公司不会添加自己的代理 - 尽管可以这样做。

更多信息

其中第一个介绍了基础设施设置,第二个介绍了反向代理/网关到位后的可扩展性选项。

IAM Primer API Gateway Guides

【讨论】:

以上是关于如何在 api 网关架构中获取 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Go 中验证来自 AWS Cognito 的 JWT 令牌?

如何在 Django 的单个 API 中获取访问令牌和刷新令牌(rest_framework_jwt)

如何从 Cognito 获取 Apple 刷新令牌?

Spring Cloud Zuul API 网关不会为无状态会话转发 JWT 令牌

如何通过zuul或任何api网关调用安全的微服务端点

如何在 express-JWT 中获取授权令牌?