API 网关如何通过自省验证访问令牌

Posted

技术标签:

【中文标题】API 网关如何通过自省验证访问令牌【英文标题】:How API gateway validates access token via introspection 【发布时间】:2020-05-26 20:19:40 【问题描述】:

我发现一篇有趣的文章有这个插图:

上面写着:

API 网关通过自省验证所有传入请求的访问令牌

但这意味着什么?

它说网关进入授权服务器并验证令牌(JWT)。 为什么需要这样做?

如果网关有授权服务器的公钥,它可以像每个后端服务一样使用签名检查令牌的有效性,为什么需要自省以及它是如何完成的?

【问题讨论】:

【参考方案1】:

我相信你在看this document。

我从这个 Secure API Gateway 了解到,网关负责introspection,后端服务只会检查令牌签名,安全性不如自省,但仍然是一层安全性。

必须进行自省以根据Authorization Server 验证令牌信息。 这更安全,因为系统可以确保收到的令牌不是恶意的、过期的并且来自已知来源。RFC 7662 中解释了有关如何完成的详细信息。

是的,如果网关可以访问证书,它可以验证令牌签名。 我真的不知道他们为什么选择后端服务器来做这件事,可能是一个项目决定。

【讨论】:

【参考方案2】:

根据您的身份提供者,这两种方式都可以完成,但需要权衡取舍。

如果您在本地验证令牌,那么是的,它可以使用公钥来执行此操作,这是非常有效的方式,但缺点是如果令牌或签名密钥被撤销,那么您的令牌仍然有效。使用远程检查,您必须承担 http 开销,但这更可靠。

通常令牌在本地保持短暂和验证。但是,如果您的访问令牌是长期存在的,您的应用程序需要严格的访问控制或库不支持本地验证,那么远程检查它们是个好主意

【讨论】:

【参考方案3】:

API 网关主要用于将传入调用路由到相应的微服务集群。

除此之外,它还可以起到验证令牌的作用,这样只有有效的流量才会被路由到下游服务器(过滤恶意流量)。

验证级别可能取决于产品所有者/架构师的决定。它可以像验证内存缓存令牌列表或对声明集、数字签名验证、到期时间、受众声明等进行深度验证一样简单。

您可以使用 JWT 解码器(如 https://devtoolzone.com/decoder/jwt)查看令牌内的声明集

【讨论】:

以上是关于API 网关如何通过自省验证访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存来自 cognito 的 ID 令牌,以便后续访问 API 网关?

如何在 Spring Boot 中通过令牌自省端点实现令牌验证?

通过 Azure AD 验证不透明的访问令牌

如何通过 Firebase Google 身份验证获取带有刷新令牌的 YouTube 数据 API 访问令牌?

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

使用 Zuul 作为认证网关