通用跨客户端授权工作流程

时间:2016-06-03 10:45:24

标签: google-oauth

如何/可以让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 的秘密。)一般策略是:

  1. 为用户手动获取一次性使用身份验证代码(使用适当的范围和access_type=offline),
  2. 将其换成代币(需要客户密码),
  3. 安全地存储刷新令牌并使用它随时生成ID令牌,我将依次使用它来向App A验证用户身份。
  4. 如果 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跨客户端身份验证以与客户端类型无关的方式工作?(或者至少以我特定的方式询问? )

0 个答案:

没有答案