我正在考虑允许用户使用 Google 登录我的移动应用程序。如果用户已经在他们的设备上登录了 Google,我不希望他们必须重新输入他们的用户名和密码(“原生登录体验”)。用户登录后,他们可以访问我服务器上的私有资源。为此,我使用了 OpenID Connect隐式流。这就是我对流程的理解:
用户正在使用我的移动客户端应用程序(ios 或 android)并选择使用 Google 登录。
我的客户端应用程序(使用 Google 的 ios 或 android SDK)获取access_token和id_token(假设用户已安装 Google+ 应用程序,已登录并已授予我的应用程序的权限)。
我的客户端应用程序将 access_token 和/或 id_token 发送到我的服务器。
我的服务器验证 access_token和/或验证 id_token
使用任一令牌,我的服务器将 google 用户映射到我自己的数据库中的用户。
我的服务器创建自己的新安全令牌并将其返回给我的客户端应用程序。
我的客户端应用程序在对我的服务器的后续请求中使用新的安全令牌来访问私有资源。
问题:
如果我想为用户提供“本机登录体验”,这是用于登录的正确流程吗?
假设我遵循所有谷歌指南(例如使用 SSL、在标头或 POST 数据中发送令牌、正确验证令牌)......
从客户端发送 access_token 存在哪些漏洞?
从客户端发送 id_token 存在哪些漏洞?
此流程还有哪些其他安全风险?
这似乎是一个非常常见的用例。这是大多数应用程序为实现 Google 的“本地身份验证”所做的事情吗?应用程序示例将不胜感激。
提前致谢。