ID令牌验证实际上并不需要客户ID /受众?

时间:2017-12-06 22:15:34

标签: google-api google-api-php-client google-api-java-client google-api-nodejs-client

在为后端API开发iOS和Android应用程序时,我为每个应用程序使用单独的客户端ID。但是,我注意到一些我觉得很奇怪的东西,我希望有人可以解释为什么这种方法有效,以及是否可以这样工作。

我注意到,如果我的后端API代码在实例化期间提供带有客户端ID的Google登录客户端对象,那么它必须与iOS或Android使用的客户端ID匹配。 (客户ID在Google API代码中被称为"受众")但是,如果我的后端API代码不提供具有客户端ID的Google登录客户端对象,则iOS / Android将始终验证。

无论您使用phpjavanodejs等,这都是如此。

我希望不使用客户端ID失败,与使用不匹配的客户端ID相同。

所以,我的问题:让后端服务器验证ID令牌而不指定客户端ID是否有效?这样做有什么不对或不安全的吗?为了确保client.audience(如果设置)匹配idtoken.audience,如果你可以将client.audience留空并且无论如何都可以工作,那么让if语句的第二部分进行检查是什么意思?

我对此感到疑惑,因为相关文档(例如Android docs)在使用后端进行身份验证时将此说明为验证过程的一部分:

  

ID令牌中的aud值等于您应用的一个客户端ID。此检查是必要的,以防止发布到恶意应用程序的ID令牌被用于访问应用程序后端服务器上相同用户的数据。

如果要防止恶意应用程序做坏事,为什么在验证期间根本不使用客户端ID是有效的?

提前致谢!我希望有人可以帮助我理解这一点。我在谷歌的文档中找不到可靠的答案。

0 个答案:

没有答案