我正在开发一个Android应用程序,它使用我自己的REST API服务器上的数据.我想使用Firebase身份验证,因为它允许用户以非常简单的方式使用Google,Facebook,Twitter ...进行登录.
但我不确定如何使用ID令牌:
因为ID令牌有截止日期,我应该在客户端应用程序的每个请求上调用getToken方法,所以我确定每次都发送一个有效的令牌吗?
每次收到客户端应用程序的请求时,我应该在服务器中调用verifyIdToken吗?
我不知道这些方法(getToken和verifyIdToken)是做什么的,并且因为它们是异步的,我担心它们会在每次调用时向Firebase服务器发出请求.所以我认为在我的每个请求中向Firebase服务器发出2个请求是不可取的...
getToken()和VerifyIdToken()都设计为每个传出/传入请求都被调用.
1)虽然getToken()是异步的,但Firebase Android SDK实际上将当前Firebase用户令牌缓存在本地存储中.只要缓存的令牌仍然有效(即自发出后一小时内),getToken()立即返回令牌.仅当缓存的令牌过期时,SDK才会从远程Firebase服务器获取新令牌.
2)VerifyIdToken()也针对性能进行了优化.它缓存Firebase令牌公共证书(有效期为6小时),用于验证本地计算机上的令牌签名.除下载公共证书外,不涉及RPC.
每次不再有效时刷新令牌.是的,您应该每次都在服务器端验证令牌.如果不再有效,则发送401错误代码并显示错误消息(如果需要).刷新令牌时使用验证令牌,并且令牌附加到每个请求.如果您使用OkHttp,您可以创建一个拦截器,在每个请求的头中添加令牌,并且当错误代码为401时也可以刷新令牌.