Firebase实时数据库在尝试进行身份验证时返回401?
我正在应用程序中使用RESTAPI与Firebase RTDB通信,并尝试使用Google访问令牌验证我的请求 我的问题是,即使使用数据库中最允许的规则,我也会收到HTTP错误401,以响应尝试进行身份验证的查询 例如,假设我尝试使用以下命令将一些数据放入数据库中,我将得到401(其中的所有值都是占位符):Firebase实时数据库在尝试进行身份验证时返回401?,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我正在应用程序中使用RESTAPI与Firebase RTDB通信,并尝试使用Google访问令牌验证我的请求 我的问题是,即使使用数据库中最允许的规则,我也会收到HTTP错误401,以响应尝试进行身份验证的查询 例如,假设我尝试使用以下命令将一些数据放入数据库中,我将得到401(其中的所有值都是占位符): curl-XPUT-d'{“UserID”:“UserName”:“Clicksurfer”,“CompletionMoves”:8,“CompletionTime”:16.21979}'h
curl-XPUT-d'{“UserID”:“UserName”:“Clicksurfer”,“CompletionMoves”:8,“CompletionTime”:16.21979}'https://.firebaseio.com/Level2/.json/?access_token=
401
最奇怪的是,当我完全放弃使用访问令牌时,查询工作:
curl-XPUT-d'{“UserID”:“UserName”:“Clicksurfer”,“CompletionMoves”:8,“CompletionTime”:16.21979}'https://.firebaseio.com/Level2/.json
200
正如我所说,我目前正在使用最宽松的调试规则:
{
"rules": {
".read": true,
".write": true
}
}
你知道是什么引起的吗?提前谢谢
编辑: 在我的项目中,除其他外,我使用AuthCode 为了做到这一点,我需要做几件事:
RequestServerAuthCode(false)
方法public class GPGSAuthentication : MonoBehaviour
{
public static PlayGamesPlatform platform;
void Start()
{
if (platform == null)
{
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().RequestServerAuthCode(false).Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
platform = PlayGamesPlatform.Activate();
}
Social.Active.localUser.Authenticate(success =>
{
if (success)
{
Debug.Log("GSPS - Logged in successfully");
}
else
{
Debug.Log("GSPS - Falied to login");
}
});
}
}
现在我们已经完成了这项工作,可以调用PlayGamesPlatform.Instance.GetServerAuthCode()
来获取AuthCode
我通过发送POST请求到https://www.googleapis.com/oauth2/v4/token
。在我的查询中,我提供了4个字段:
,它具有以前使用的客户端的id(我们从中获取AuthCode)client\u id
,它具有相关的秘密client\u secret
,它总是带有值grant\u type
“authorization\u code”
,它具有我们获得的AuthCode的值code
200
响应:
,针对我的Firebase rtdb进行身份验证时我(未能)使用的令牌access\u token
,上述令牌的类型令牌类型
中,令牌过期之前的时间量(我假定以秒为单位)expires\u在
,一种可以用来获取新的refresh\u-token
的令牌,无需保持Google用户的连接access\u-token
然后,我将此
access\u token
值提供给我发送给数据库的查询,并立即获得401
错误。您的访问令牌似乎无效。你是如何生成的?嗨,弗兰克,我通过交易一个身份验证码来生成访问令牌,这个身份验证码是在用户通过身份验证(登录)后从Google Play Services获得的。要查看我所做的全部过程,请。我为Unity使用GooglePlay服务包,并通过RESTAPI做其他事情。“我从GooglePlay服务获得的”听起来有点可疑。你能展示一下你如何确定你为GOOGLE\u ACCESS\u TOKEN
传递的确切值的代码吗?不用担心,@frankvanpoffelen我编辑了我的原始帖子,因为有很多信息要提供-请查看编辑部分下的所有内容。谢谢:)这绝对是一个OAuth2令牌,而不是JWT,这意味着它只会被数据库接受,如果它是为项目上的合作者或服务帐户提供的。我不确定您是否可以按原样将此OAuth令牌与RTDB一起使用。你有没有在任何地方读到这应该有效?你的访问令牌似乎无效。你是如何生成的?嗨,弗兰克,我通过交易一个身份验证码来生成访问令牌,这个身份验证码是在用户通过身份验证(登录)后从Google Play Services获得的。要查看我所做的全部过程,请。我为Unity使用GooglePlay服务包,并通过RESTAPI做其他事情。“我从GooglePlay服务获得的”听起来有点可疑。你能展示一下你如何确定你为GOOGLE\u ACCESS\u TOKEN
传递的确切值的代码吗?不用担心,@frankvanpoffelen我编辑了我的原始帖子,因为有很多信息要提供-请查看编辑部分下的所有内容。谢谢:)这绝对是一个OAuth2令牌,而不是JWT,这意味着它只会被数据库接受,如果它是为项目上的合作者或服务帐户提供的。我不确定您是否可以按原样将此OAuth令牌与RTDB一起使用。你有没有在任何地方读到这本应该有用的书?