正确使用后端服务器进行身份验证的方法

时间:2016-05-11 10:10:59

标签: android authentication google-signin

根据doc,为了使用后端服务器进行身份验证,我必须:

  • 使用HTTPS将用户的ID令牌发送到我的服务器。
  • 验证ID令牌的完整性,并从ID令牌的子声明中检索用户的ID。

这项工作相当不错,但如果我必须验证对服务器的所有请求怎么办?

我应该存储idToken(在私有分片首选项上)并在每次服务器端验证它吗?由于idToken具有有效日期,因此客户端必须能够在过期时重新生成它。

或者在第一个连接上,我应该向用户返回一个id(没有有效日期),这将允许他与服务器通信(似乎不太安全)?

4 个答案:

答案 0 :(得分:2)

对于每个请求,服务器的每个请求都应该验证令牌,就像每个请求的密钥一样。此密钥在很长一段时间内无效,因此如果您希望“会话”持久,则通常会有刷新令牌。如果您没有它,则每次令牌的有效期到期时都需要再次进行身份验证。

所以是的,您应该将令牌存储在客户端。最佳做法是确保一个非常短的有效期,以确保如果令牌受到攻击,攻击者将有很短的时间来做恶意事件。

答案 1 :(得分:1)

我在silentSignIn()方法的文档中找到了技术答案(@ EmCode的答案是正确的)。 (这是一个link)。

  

GoogleSignInResult可能包含一个ID令牌,可用于验证和识别您与应用程序服务器建立的会话。如果使用ID令牌到期时间来确定会话生存期,则应在每次API调用应用程序服务器之前调用silentSignIn来检索刷新的ID令牌。

答案 2 :(得分:0)

看看这是否有意义:

  

这项工作相当不错,但如果必须对服务器的所有请求进行身份验证该怎么办?

我认为Google登录的目的是通过Google凭据对用户进行身份验证。它并不是真正用于验证您自己的服务器上的所有客户端请求。您的服务器和谷歌之间会发生什么应该只是用户令牌验证。一旦令牌被正确验证,后续的C / S数据交换可以使用您选择的身份验证,无需每次都打扰谷歌或关心令牌有效性。

  

如果您使用ID令牌到期时间来确定会话生存期,则应通过调用检索刷新的ID令牌   每次API调用应用程序服务器之前的silentSignIn。

是的,如果您的应用程序使用了会话,并且您希望令牌定义有效性,那么您需要一直打扰Google。

答案 3 :(得分:-1)

使用后端服务器进行身份验证的正确方法是改进使用此lib,这可以非常快速地获取数据或在beckend服务器上上传数据。