FedCM测试报错:IdentityCredentialError无法获取令牌及403问题求助
解决FedCM + Google OneTap 403错误及令牌无效问题
问题背景
- 网站原Google OneTap登录在
https://kontext.tech/正常运行多年,现因第三方Cookie逐步淘汰测试FedCM。 - 浏览器已开启「允许网站显示身份服务的登录提示」,并设置「阻止第三方Cookie」。
- 已添加FedCM配置代码:
<div id="g_id_onload" data-client_id="***.apps.googleusercontent.com" data-login_uri="https://localhost:50001/account/external-login-google-one-tap?rurl=~%2F" data-use_fedcm_for_prompt="true"> </div>
- 点击登录按钮后触发以下错误:
When fetching the id assertion endpoint, a 403 HTTP response code was received.
localhost/:1 Provider's token is invalid.
client:48 [GSI_LOGGER]: FedCM get() rejects with IdentityCredentialError: Error retrieving a token.
解决方案
校验OAuth客户端ID的授权配置
登录Google Cloud控制台,找到对应OAuth 2.0客户端ID:- 确认「已授权的JavaScript来源」包含
https://localhost:50001(本地测试地址),FedCM对来源校验比传统OneTap更严格,即使之前OneTap可用,也要重新确认该配置。 - 确认「已授权的重定向URI」包含你的后端登录回调地址(即
data-login_uri指向的地址)。 - 检查客户端ID本身是否正确,确保星号替代的部分没有拼写错误。
- 确认「已授权的JavaScript来源」包含
检查后端登录端点的FedCM兼容性
你的data-login_uri对应的后端接口需要满足:- 正确返回CORS响应头,允许
https://accounts.google.com作为请求来源,否则Google的FedCM服务无法访问该端点。 - 接口处理逻辑不能依赖第三方Cookie(已设置阻止),要完全基于FedCM传递的请求参数处理身份校验。
- 正确返回CORS响应头,允许
确认浏览器FedCM设置
除了开启登录提示权限,还要检查浏览器的FedCM实验性功能:- Chrome浏览器可访问
chrome://flags/#fedcm,确保设置为「Enabled」;其他支持FedCM的浏览器也要确认对应功能未被禁用。
- Chrome浏览器可访问
验证OAuth consent screen状态
在Google Cloud控制台的OAuth consent screen页面:- 如果是测试项目,确认「测试用户」列表包含你用于测试的邮箱;如果是生产项目,确保已发布该consent screen,未发布的项目会限制FedCM的正常访问。
内容的提问来源于stack exchange,提问作者Raymond Tang
相关产品推荐
相关产品推荐

