Security OAuth 2.0中的客户端机密
要使用GoogleDriveAPI,我必须使用OAuth2.0进行身份验证。我有几个问题要问Security OAuth 2.0中的客户端机密,security,oauth,google-api,oauth-2.0,Security,Oauth,Google Api,Oauth 2.0,要使用GoogleDriveAPI,我必须使用OAuth2.0进行身份验证。我有几个问题要问 客户端id和客户端机密用于标识我的应用程序是什么。但如果是客户端应用程序,则必须对其进行硬编码。所以,每个人都可以反编译我的应用程序并从源代码中提取它们这是否意味着一个坏应用可以通过使用好应用的客户端id和密码来伪装成一个好应用?所以用户会显示一个屏幕,要求授予一个好应用权限,即使它实际上是由一个坏应用请求的?如果是,我该怎么办?或者实际上我不应该担心这个 在移动应用程序中,我们可以将webview嵌入
我开始就你的问题写评论,但后来发现有太多的话要说,所以下面是我对这个问题的看法
我的问题与第一个问题相同,最近我自己也做了一些研究,我的结论是,不保守“客户秘密”是可以的。 在OAuth2规范中,不保持客户机机密性的客户机类型称为“公共客户机”。 以下事实可以防止恶意用户获取授权代码,然后访问令牌 1.客户端需要直接从用户而不是从服务获取授权代码 即使用户表示他/她信任客户机的服务,客户机也无法仅通过显示客户机id和客户机机密从服务中获取授权代码。 相反,客户端必须直接从用户处获取授权代码。(这通常是通过URL重定向完成的,我将在后面讨论。) 因此,对于恶意客户端,仅知道用户信任的客户端id/机密是不够的。它必须以某种方式涉及或欺骗用户,才能给它授权码, 这应该比只知道客户id/机密更难 2.重定向URL已使用客户端id/secret注册 让我们假设恶意客户端设法让用户参与进来,并让用户单击服务页面上的“授权此应用”按钮。 这将触发从服务到用户浏览器的URL重定向响应,其中包含授权代码。 然后,授权代码将从用户的浏览器发送到重定向URL,客户端应该在重定向URL上侦听以接收授权代码。 (重定向URL也可以是localhost,我认为这是“公共客户端”接收授权代码的典型方式。) 由于此重定向URL是使用客户端id/secret在服务中注册的,因此恶意客户端无法控制授权代码的授予位置。
这意味着具有您的客户端id/secret的恶意客户端在获取用户授权码方面还有另一个障碍。回答第二个问题:出于安全原因,谷歌API要求不能在应用程序本身内进行身份验证/登录(如不允许使用网络视图)并且需要使用浏览器在应用程序外部执行,以提高安全性,下面将进一步说明:
另外,我猜当应用程序要求人们提供他们的Facebook、Twitter、Dropbox或其他凭证时,人们通常会产生怀疑。我怀疑很多普通人读过OAuth规范并说“现在我安全了”但是,请使用常识,通常不要使用他们不信任的应用程序。真的,一个很好的问题肯定应该有更多的要点。您可以从服务器下载ClientId和secret,并在首次成功登录时将其保存在密钥链中it@Sharvan我可能错了,但我认为手机上的钥匙链很脆弱,因此,您的客户机密码可以公开。您的客户机id和客户机密码将不安全,因为您将它们发布在SSL隧道中。是的,他们更容易受到中间人的攻击。如果用户代理您的HTTPs呼叫,他们可以接受错误的证书并查看您发布的所有内容。顺便说一下,这是在mobi上窃取他人客户机密的最简单方法