反向信任配置下的OAuth令牌交换及代用户调用API问题
令牌交换与联邦信任的核心问题
背景场景
我有两个应用:
- Application A 以 IDP 1 作为 OAuth 提供商
- Application B 以 IDP 2 作为 OAuth 提供商
目前 IDP 1 已与 IDP 2 建立单向信任(用户可使用 IDP 2 的凭据登录 Application A)。现在需要让 Application A 调用 Application B 的 API:Application A 持有 IDP 1 颁发的访问令牌,希望调用 IDP 2 的/token端点,将 IDP 1 的令牌交换为 IDP 2 的新令牌,以代表用户身份传递给 Application B。
问题1:单向信任是否足够完成令牌交换?
不行,必须是双向信任。
当前的单向信任是 IDP 1 信任 IDP 2(允许 IDP 2 的用户登录 A),但令牌交换的场景是把 IDP 1 颁发的令牌拿到 IDP 2 去换,这要求 IDP 2 必须验证该令牌的合法性——它得确认这个令牌来自自己信任的 IDP,并且能完成用户身份的映射。如果 IDP 2 不信任 IDP 1,它会直接拒绝这个令牌交换请求,不会颁发自己的令牌。
问题2:用*代用户流(On-Behalf-Of, OBO)*实现系统间调用是否合理?用户登出后IDP2的令牌是否仍有效?
- 方案合理性:完全合理。*代用户流(OBO)*就是专门为这种「服务以用户身份调用另一个服务API」的场景设计的,刚好匹配你的需求——Application B 需要基于用户的权限来处理请求,OBO 流能保证传递的是用户上下文的令牌。
- 令牌有效性问题:IDP 2 颁发的令牌可能仍然有效。OBO 令牌的生命周期是独立配置的,默认情况下不会和原 IDP 1 的令牌绑定撤销。除非你在 IDP 2 中配置了额外的机制(比如令牌黑名单、会话关联撤销),否则只要 OBO 令牌还在有效期内,即使用户登出导致 IDP 1 的令牌失效,它依然可以被 Application B 接受。
内容的提问来源于stack exchange,提问作者Adiant
相关产品推荐
相关产品推荐

