如果令牌在服务之间过期怎么办?

Posted

技术标签:

【中文标题】如果令牌在服务之间过期怎么办?【英文标题】:What if token is expired between services? 【发布时间】:2018-09-13 18:28:58 【问题描述】:

我一直在阅读服务/微服务之间的通信。

API 网关对请求进行身份验证,并将访问令牌(例如 JSON Web 令牌)传递给服务,该令牌在每个请求中安全地识别请求者。服务可以在向其他服务发出的请求中包含访问令牌。

via http://microservices.io

我正在将用户的访问令牌传递给下游服务,所以它或多或少看起来像这样:

但是如果微服务之间的令牌过期了怎么办?

有很多方法可以解决这个问题,这些方法似乎很合理:

验证用户的访问令牌并在 API Gateway 中创建短期 JWT(一种内部令牌)

每个微服务都会验证 JWT 并生成自己的 JWT 以根据范围规则与其他微服务通信

所以我们需要 Auth 服务来验证或请求令牌。

任务是:

为了确保令牌在通过服务的过程中不会过期,我们可以在 API 网关层进行检查:如果令牌在 n(~1) 分钟内过期,则拒绝它,因此用户必须使用刷新令牌以获取新的访问令牌。这意味着令牌始终在完成请求所需的时间内有效。这种方法的优缺点是什么?

【问题讨论】:

【参考方案1】:

我有同样的问题,所以谷歌把我带到了这里。希望半年后回答这个问题还为时不晚。

我不能说这是一个“答案”,但我希望我的想法能给任何人一些启发。所以这是一种“思想分享”。

我认为有两种方法可以处理这个问题:

    如果令牌将在 10 分钟后过期,请在 6 分钟后刷新(仅作为示例)。所以通过调整过期时间和刷新时间来确保你说的情况永远不会发生。

    另一种方法是调整系统架构。将 API 分为内部和外部。所有外部的token都会在API Gateway上检查,然后内部服务就没有token了。

我认为我们有很多方法可以避免这个问题提到的问题。根据不同的特定项目需求,我们应该考虑使用不同的安全设计。所以没有“银弹”。

【讨论】:

以上是关于如果令牌在服务之间过期怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak :使用带有永不过期令牌的服务帐户

Instagram 访问令牌过期

如何知道访问令牌已过期?

Abp框架中授权令牌过期后,咋么设置还可以使用

gitlab令牌过期

Token是啥意思 token过期怎么办