我正在使用 C# 在 Unity 中构建游戏。由于我使用的是 Firebase,并且现成的 Unity Firebase SDK 在我的情况1中无法工作,因此我通过 C#类(附带)与Firebase 的 REST API进行交互。HttpClient
System.Net.Http
我目前正在努力使用 Firebase 身份验证 API。对于那些不熟悉 OAuth API 的人,当我调用注册或登录端点时,我会同时获得ID Token和Refresh Token。ID 令牌过期;刷新令牌则不然。当 ID 令牌过期时,我必须调用另一个端点(称为Token Exchange ),以使用刷新令牌获取新的 ID 令牌。
1据传有一个Google Identity Toolkit C# 库,但我发现它的搜索返回的第一个结果导致 404 错误而不是文档。😢
按照Firebase 指南和底层Identity Toolkit 指南,到目前为止,我已经成功地将令牌交换端点与cURL
bash 中的命令连接起来:
curl 'https://securetoken.googleapis.com/v1/token?key=[MY FIREBASE API KEY]' \ -H 'Content-Type: application/x-www-form-urlencoded' \ --data 'grant_type=refresh_token&refresh_token=[MY REFRESH TOKEN]'
当然,我替换[MY FIREBASE API KEY]
为我的 Firebase Web API 密钥以及[MY REFRESH TOKEN]
从登录/注册端点返回的刷新令牌。
然而,尽管我进行了多次尝试,我仍然无法cURL
在 C# 中复制这个命令!
我失败的尝试
1.
这是我原来的代码,不起作用。
public async Task<bool> ExchangeToken()
{
FormUrlEncodedContent body = new FormUrlEncodedContent(new Dictionary<string, string>() {
{"grant_type", "refresh_token" },
{"refresh_token", Uri.EscapeDataString(user.refreshToken) }
});
HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Post, "https://securetoken.googleapis.com/v1/token?key=" + apiKey);
message.Content = body;
message.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
HttpResponseMessage res = await client.SendAsync(message);
}
这很奇怪,考虑到我2XX (OK)从应该是等效cURL命令的响应中得到了响应......
我对所有其他端点的所有其他请求都有效。有两个显着的区别:1)从技术上讲,API 不是 Firebase 的,而是 Google Identity Toolkit 的。2)这是我正在使用的唯一使用Content-Type
标头application/x-www-form-urlencoded
而不是 的端点application/json
。
如何使用 C#与Google Identity Toolkit API 的令牌交换端点进行交互?(虽然我目前正在使用 HttpClient 类,但我对其他解决方案完全持开放态度!它们只需与 Unity3D 兼容即可。)
提前致谢!
慕的地6264312
暮色呼如
翻翻过去那场雪
相关分类