【问题标题】:Google's OAuth 2.0 for installed apps and Client Secret not being a secret谷歌的 OAuth 2.0 用于已安装的应用程序和客户端密码不是秘密
【发布时间】:2017-06-01 15:45:00
【问题描述】:

Google 似乎一直在对原生应用的 OAuth 交互进行现代化改造,正如最初在此处宣布的那样 https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

并且正如他们当前的文档页面所证明的那样 https://developers.google.com/identity/protocols/OAuth2InstalledApp

我已经能够在引用的 github repo 中成功运行示例控制台应用程序。

此流程使用客户端密码和其他参数交换访问令牌的授权代码。但是,众所周知(并且如引用的文章中所述)客户端机密不能安全地存储在已安装的应用程序中。同一篇文章以下列方式陈述了这一事实

该过程会产生一个客户端 ID,在某些情况下,还会产生一个客户端密码,您可以将其嵌入应用程序的源代码中。 (在这种情况下,客户端机密显然不被视为机密。)

因此,如果此流程是已安装应用程序的推荐流程,我们是否应该不必担心保护 client_secret 并将其直接嵌入到应用程序中?如果是这样,那么这个流程是怎么回事?

此外,如示例所示,在本地生成一个随机 http 重定向 URL,该 URL 未在 Google Developer Console 的凭据页面中的任何位置注册。这与 Azure AD 不同,在 Azure AD 中,您必须在注册本机应用程序时指定重定向 uri。

【问题讨论】:

    标签: oauth-2.0 google-oauth


    【解决方案1】:

    Google 授权服务器的行为取决于您注册的客户端类型。

    奇怪的是,桌面和电视客户端需要“客户端机密”,而不是 iOS 和 Android,但是对于所有 4 种原生应用类型,服务器将客户端视为非机密,而“客户端机密” value 实际上是客户端 ID 的扩展。这与 Web 客户端不同,后者假定客户端机密性得到维护,因此对于增量身份验证等操作可以区别对待。

    关于重定向 URI 的注册,这也取决于客户端类型。对于某些类型,例如 Web,需要手动注册。对于桌面等其他类型,重定向 URI 是预先注册的(在桌面的情况下,http://127.0.0.1:*/*)。

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2016-02-16
      • 2021-12-09
      • 2018-09-21
      • 2017-10-18
      相关资源
      最近更新 更多