【问题标题】:Implementing public API keys with microservices使用微服务实现公共 API 密钥
【发布时间】:2021-04-10 01:15:17
【问题描述】:

对于大多数客户端应用程序和 UI 方法,JWT 似乎是为基于 OAuth 的方法携带令牌的好方法。这允许将用户/身份验证服务与实际访问的服务解耦。

鉴于此架构

我的问题是:在公共 API(即 Github 或 Slack)的情况下,生成具有特定角色的不记名密钥。该密钥在微服务架构中是如何授权的?这些类型的密钥是否只要求每次请求都查询 Auth 服务?

API 网关可以缓解这种情况吗?我想了解是否存在服务之间通信最少的解决方案。谢谢!

【问题讨论】:

    标签: authentication oauth-2.0 microservices api-design


    【解决方案1】:

    通常,这可以使用作用域来解决。范围是授予用户执行某些操作的权限,例如将有一个范围用于读取存储库,另一个用于更新它,另一个用于删除等。

    这些范围与令牌相关联,通常由用户自己请求或根据用户类型自动添加。与身份验证过程相同,它们可以包含在令牌本身中,编码为 jwt 中的声明,或者可以在请求一个操作时通过调用 oauth 服务器来请求或检查它们。

    将它们包含在 jwt 中的优点是,每次请求操作时都不需要调用外部服务器,因此延迟更低,所需带宽更少,还可以消除故障点。显然,如果使用此解决方案,令牌必须正确签名甚至加密以避免可能的操作。 但是它也有缺点,最危险的是令牌不能被撤销,因为该信息不能包含在令牌中,并且检查令牌是否有效的服务只能访问令牌本身包含的数据。正因为如此,这种代币的发行一般都会有一点过期时间,所以一旦代币被盗,它的有效期就会非常有限

    【讨论】:

    • 那么您是否建议给定一组范围,生成一个小的结构化密钥(但不是 JWT),并根据给定的范围传播到相关服务,并且只有这些服务可以授权钥匙?我了解 JWT 在大多数情况下是如何有益的,但我有兴趣了解 3rd 方令牌实际上是如何获得授权的——它们涉及哪些服务
    • 否,如果范围在令牌中编码为 jwt 内的声明,则接收令牌的服务可以检查该令牌是否有效以执行请求的操作。另一方面,如果令牌不是 jwt(不透明令牌),则服务必须调用已发布该令牌的 oauth 服务器来检查范围,并与他们一起确保操作是否被授权
    • 对,我了解 JWT 部分,它更干净。但听起来使用 3rd 方应用程序访问的 API 密钥(例如 Slack API 或类似的东西)没有办法避免访问 Auth 服务,因为它们是不透明的。
    猜你喜欢
    • 2019-07-27
    • 2021-09-23
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2013-05-10
    • 2017-09-19
    相关资源
    最近更新 更多