谷歌的OAuth 2.0用于安装的应用程序和客户端密钥不是秘密

时间:2017-06-01 15:45:00

标签: oauth-2.0 google-oauth2

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重定向网址,该网址未在Google Developer Console的凭据页面中的任何位置注册。这与Azure AD不同,在注册本机应用程序时,您必须具体了解重定向uri。

1 个答案:

答案 0 :(得分:2)

Google授权服务器的行为是根据您注册的客户端类型进行的。

"客户端秘密"这是一个奇怪的问题。对于桌面和电视客户端是必需的,但不是iOS和Android,但是对于所有4种本机应用程序类型,服务器将客户端视为非机密,以及客户端密码" value实际上是客户端ID的扩展。这与Web客户端形成对比,在Web客户端中,假设客户端机密保密,因此可以对增量身份验证等操作进行不同的处理。

关于重定向URI的注册,这也是在客户端类型上的门控。对于某些类型的Web,需要手动注册。对于像Desktop这样的其他类型,重定向URI已预先注册(在桌面的情况下为http://127.0.0.1:*/*)。