首页 > 解决方案 > 如果客户端密码不用于具有后端 api 的 React Natvie (ios/android) 应用程序中的 Google 登录,那么客户端密码的目的是什么?这如何安全?

问题描述

我已经从我要去的地方谷歌登录反应原生应用程序(让我们说 ABC),我得到 idToken 并使用 Https 安全地发送到后端服务器,然后它验证 idToken 并获取 accessToken。但在整个过程中,clientSecret 并没有在任何地方使用。任何人都可以使用我的客户 ID,比如说应用 XYZ 来访问用户数据。这如何安全?

另一方面,在我使用护照的反应网站和后端服务器中,需要客户端密码。我在这里错过了什么吗?

如果原生应用程序中使用的流程是安全的,我可以在 react 网站中使用相同的流程,即摆脱护照策略。

标签: react-nativegoogle-oauthpassport.jsgoogle-signin

解决方案


客户端 ID 包含在提供给浏览器的 HTML 中,正如您指出的那样,它不安全——也不是有意的。客户端 ID 只是标识应用程序。

对于Web 应用程序,需要授权的 JavaScript 源,对于后端服务,还需要授权的重定向 URI。请求/响应由 Google 的 OAuth 服务使用这些设置进行验证。

HTTPS,其中包括一个签名证书是必需的,它有助于确保流量来自您的已验证域托管和提供的源。

对于登录响应,通常使用可以在后端安全验证的签名 JWT(除非使用 OAuth 2.0 或 gapi)。

客户端密钥当然不应该包含在提供给浏览器的 HTML 中,并且应该只保存在安全位置、不受源代码控制和后端服务器上。

使用 nonce 还可以帮助您避免重放攻击。查看纯服务器端应用程序的 状态变量,或 Sign In With Google nonce属性。


推荐阅读