zzz*_*zzz 25 google-api google-oauth google-api-python-client google-cloud-platform gmail-api
我们目前用于google-api-python-client处理面向用户的 OAuth 流程。我们有一些用户给我们发电子邮件询问为什么他们的帐户没有成功导入,当我们查看时,他们的令牌没有适当的范围。例如,我们希望找到所有这些范围:
https://www.googleapis.com/auth/gmail.metadata
openid
https://www.googleapis.com/auth/userinfo.email
但我们只收到最后 2 个。当我们查看 OAuth 流程时,我们注意到我们的 OAuth 流程如下所示(应用程序名称和帐户名称经过编辑)。请注意,请求的范围有一个复选框,并且默认情况下该复选框处于未选中状态。(从 2020 年中期到大约一周前,此流程有 2 个额外的确认步骤,但默认情况下选中了最后一个复选框。)
将其与流行应用程序 Fantastical 的 OAuth 流程进行比较(许多其他应用程序,包括 Spark,看起来很相似):
在找到链接到Google 博客上这篇文章的StackOverflow 答案后,似乎有些应用程序已继承到第二个流程,但第一个流程是新的默认流程。两个问题:
默认情况下未选中的复选框似乎是一个相对较新的更改,我找不到任何有关它的文档。这是新的默认行为,还是 OAuth 流程中是否有一个参数/某些内容我们可以更改以默认检查它?当未选中时,用户认为他们不需要检查它,因此他们按“继续”,然后我们的应用程序必须抛出错误并向用户解释他们需要检查该范围复选框。现在复选框未选中似乎有点疯狂,因为它是我明确要求的范围……这就是此流程的全部要点。
有没有什么方法可以使我们的流程与 Fantastical、Spark 以及 2018 年左右之前创建的任何其他 OAuth 应用程序仍然具有的旧的、更简单的流程保持一致?或者那些其他旧应用程序是否有过渡到新流程的预计到达时间?上述 Google 博文表示,新流程将“在 2019 年初扩展到现有客户”,因此我们大约晚了 2.5 年才做出这一改变。就目前情况而言,它使“新”OAuth 应用程序(我们的应用程序是在 2019 年创建的,所以算不上新......)处于令人难以置信的劣势,因为它的步骤更多,需要明确同意,更容易出现用户错误,并且使它看起来像我们的应用程序在任何方面都受到较少的审查或“安全”,因为其流程与用户接受的许多其他应用程序的培训流程截然不同。
这个问题已经存在了几个月了,所以也发布这篇文章来帮助处于相同位置的其他人。一些额外的要点,以防对任何人有帮助:
如果我从 Fantastical 流程中获取 client_id 和 redirect_url 并在我们应用程序的链接中使用它,则该流程看起来与他们的相同。所以它似乎是由客户端 ID 驱动的,而不是 URL 或我们流程中发生的某些事情。
我们的应用已通过 Google 的第三方安全评估并通过,因此它可能与我们请求的范围或我们的应用在审批流程中的状态无关
我们的流程和 Fantastical 都发生在 Web 视图中,因此它不太可能与本地与 Web 视图相关
这种情况发生在我们请求的几个不同范围中,因此它不太可能与我们请求的范围相关(例如,Fantastical 的范围比gmail.metadata我们流程中的范围更广泛/审查更严格)
就我而言(Android 应用程序),在请求范围和登录选项时会出现禁用的复选框。
我通过分两步将登录与范围请求分开来避免这种情况,如下所示:
首先,仅使用该选项进行登录requestEmail。对于用户来说,这是一个对话框,他们可以在其中选择帐户,但它已经授予基本内容(个人资料、电子邮件和 openid):
GoogleSignInOptions options =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
GoogleSignInClient signInClient =
GoogleSignIn.getClient(context, options);
signInClient
.addOnCompleteListener(task -> {
signInLauncher.launch(signInClient.getSignInIntent());
});
Run Code Online (Sandbox Code Playgroud)
稍后,在处理登录结果时,请求额外的范围(在我的例子中为 Google Drive)并再次包含电子邮件范围:
GoogleSignIn.requestPermissions(
this,
requestCode,
account,
emailScope, driveScope);
Run Code Online (Sandbox Code Playgroud)
再次请求电子邮件范围非常重要,否则从权限请求返回时它将为空。但由于它已在登录时授予,因此它不会出现在复选框上。
正如Google 文章末尾所指出的,登录时允许使用“个人资料”、“电子邮件”和“openid”。
| 归档时间: |
|
| 查看次数: |
3739 次 |
| 最近记录: |