如何/可以让Google跨客户端身份验证以与客户端类型无关的方式工作(例如,仅使用网络浏览器和cURL命令)?
我有两个OAuth 2.0客户端(让我们称之为客户端A和客户端B),类型为#34; Web Application"并在同一个Google API Console项目中。每个客户的凭据都由不同的应用程序使用(例如,分别为应用A和B):
App A 使用客户端A实施Google登录;用户登录后获取的ID令牌被发送到/verify
端点,该端点验证令牌并向应用程序验证用户。
应用B 希望通过发送ID令牌(使用客户端B获取&)来自动将特定用户的离线身份验证自动化为 App A #39; s凭证)直接到其/verify
端点。 (请注意, App B 无法访问客户端A 的秘密。)一般策略是:
access_type=offline
),如果 App B 使用在"正常"中获得的令牌使用客户端B 凭据的方式,然后 App A 会将我的ID令牌视为无效,因为标准检查涉及验证解码后的令牌的有效负载是否为{{ 1}}值等于客户端A 的ID,它赢得了
。跨客户身份/授权救援,对吧?
来自https://developers.google.com/identity/protocols/CrossClientAuth:
Google认为,当用户将特定范围的访问权限授予项目中的任何客户ID 时,该授权表明用户对整个应用程序的信任对于那个范围。
效果是,只要应用程序的组件可以通过Google的授权基础架构可靠地进行身份验证,就不会提示用户批准对同一逻辑应用程序多次访问任何资源, strong>包括网络客户端,JavaScript客户端和Android应用程序。
(强调我的。)
问题在于,虽然文档明确表示我想要做的事情是可能的,但它只显示Android的一个示例 - > Web跨客户端身份验证,涉及调用仅在Android上可用的特定实用程序功能,将范围作为"魔术字符串"形式为aud
。
我已经浏览过互联网,并找到了如何以通用方式或其他客户端组合执行此操作的零示例。我试过天真地发送一个类似构造的"魔法"请求授权代码时的范围字符串,被Google的服务器视为无效(oauth2:server:client_id:{CLIENT_A_ID}:api_scope:{SCOPE1 SCOPE2 ...}
400错误)。我已经停止了对Google库的反编译,以了解它如何将此字符串转换为实际的服务器请求(如果事实上,它正在做什么)。
我的问题:有谁知道如何让Google跨客户端身份验证以与客户端类型无关的方式工作?(或者至少以我特定的方式询问? )