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 中通过令牌自省端点实现令牌验证?