Android应用Google登录的Firebase Token验证失败,Web端正常
Android端Google登录Token验证失败排查方案
当验证Android应用通过Google登录获取的Token时,返回以下错误:
{"message":"Unauthorized - Token is invalide: The value 'eyJhbGciOiJSUzI...' is not a verified ID token:\n- - The token is expired\n- - The token was not issued by the given issuers\n- - The token is not allowed to be used by this audience\n- - Token signature mismatch\n"}
但Web端使用邮箱/密码授权时验证正常,后端验证代码如下:
$idTokenString = $request->input('token'); try { // 验证Google提供的Firebase凭证Token $verifiedIdToken = $auth->verifyIdToken($idTokenString); dd($verifiedIdToken); } catch (\InvalidArgumentException $e) { // Token格式错误时 return response()->json([ 'message' => 'Unauthorized - 无法解析Token: ' . $e->getMessage() ], 401); } catch (Exception $e) { // Token无效(过期等)时 return response()->json([ 'message' => 'Unauthorized - Token无效: ' . $e->getMessage() ], 401); } --- ### 排查与解决步骤 - **确认Token类型正确** Android端Google登录后,必须传递**ID Token**而非Access Token。调用Google登录API的`getIdToken()`方法获取用于后端验证的ID Token,别误传了用于API调用的Access Token。 - **校验Token发行方(Issuer)** 解码Token查看`iss`字段,必须是`https://accounts.google.com`或`accounts.google.com`。若不符,说明Token不是来自你的项目关联的Google登录服务,检查Android端是否正确配置了Firebase项目的Google登录。 - **匹配受众(Audience)信息** Token的`aud`字段需与你的Firebase项目Web API密钥,或对应Android应用的OAuth 2.0客户端ID一致。确认后端Firebase初始化配置正确,Android端Google登录使用的是该项目下的Android客户端ID。 - **避免Token过期** Google ID Token有效期仅1小时,Android端获取后需立即传给后端验证,禁止使用缓存的旧Token。若用户登录后长时间未操作,需重新获取新Token。 - **修复签名不匹配问题** 签名不匹配多因Token被篡改,或后端Firebase SDK未正确获取Google公钥验证签名。确保后端使用最新版Firebase SDK,且初始化时使用了正确的项目服务账号密钥,SDK会自动处理签名验证。 - **检查Android端配置** 确认Firebase控制台中已正确配置Android应用的包名、SHA-1指纹,且Google登录使用的OAuth客户端ID属于该Android应用,而非Web端客户端ID。 内容的提问来源于stack exchange,提问作者Sakezzz
相关产品推荐
相关产品推荐

