在为后端API开发iOS和Android应用程序时,我为每个应用程序使用单独的客户端ID。但是,我注意到一些我觉得很奇怪的东西,我希望有人可以解释为什么这种方法有效,以及是否可以这样工作。
我注意到,如果我的后端API代码在实例化期间提供带有客户端ID的Google登录客户端对象,那么它必须与iOS或Android使用的客户端ID匹配。 (客户ID在Google API代码中被称为"受众")但是,如果我的后端API代码不提供具有客户端ID的Google登录客户端对象,则iOS / Android将始终验证。
我希望不使用客户端ID失败,与使用不匹配的客户端ID相同。
所以,我的问题:让后端服务器验证ID令牌而不指定客户端ID是否有效?这样做有什么不对或不安全的吗?为了确保client.audience(如果设置)匹配idtoken.audience,如果你可以将client.audience留空并且无论如何都可以工作,那么让if语句的第二部分进行检查是什么意思?
我对此感到疑惑,因为相关文档(例如Android docs)在使用后端进行身份验证时将此说明为验证过程的一部分:
ID令牌中的aud值等于您应用的一个客户端ID。此检查是必要的,以防止发布到恶意应用程序的ID令牌被用于访问应用程序后端服务器上相同用户的数据。
如果要防止恶意应用程序做坏事,为什么在验证期间根本不使用客户端ID是有效的?
提前致谢!我希望有人可以帮助我理解这一点。我在谷歌的文档中找不到可靠的答案。