3 回答
TA贡献1817条经验 获得超6个赞
Google 希望您使用 Firebase 进行身份验证。虽然 Firebase 没有 Google 提供的 .NET 客户端 SDK,但还有其他选择。
如果您不使用 Firebase 并自行使用 oAuth/OpenID Connect 端点执行必要的任务,那也可以。有一个Google .NET SDK可以帮助您解决这个问题......一点点。SDK列出了该SDK“支持”的Google API;Google Cloud Identityv1
和v1beta
API 均在列表中。因此,您可以通过此 .NET SDK 调用 Google Cloud Identity 端点。您确实必须了解各种身份验证流程的含义,而在 Firebase 中,作为应用程序开发人员,大部分机制都是从您那里抽象出来的。
TA贡献1853条经验 获得超9个赞
在进一步研究代码后,我记得我正在对我的HttpClient:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", idToken);
所有其他 API 调用都包含此内容,因为它们需要使用 ID 令牌进行身份验证。然而,这似乎混淆了代币交换端点;它必须1)查找授权标头,然后 2)使用消息内容中提供的刷新令牌。
如何解决此问题
不要在您的服务器上设置默认标头HttpClient(该标头应该被重复用于所有HTTP 请求),而是执行以下操作:
var req = new HttpRequestMessage(/* HttpMethod enum value, endpoint URL/IP */);
req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", user.idToken); //Set the authorization per-request, not globally
var res = await client.SendAsync(req);
然后只需调用令牌交换端点即可!
来自Firebase REST API 文档:
您可以通过向 securetoken.googleapis.com 端点发出 HTTP POST 请求来刷新 Firebase ID 令牌。
https://securetoken.googleapis.com/v1/token?key=[API_KEY]
refresh_token只需在正文中提供一个参数(以及强制的grant_typevalue refresh_token)。不要提供授权标头。
希望这可以帮助任何遇到同样问题的人!
TA贡献2065条经验 获得超14个赞
作为替代方案,您还可以使用https://github.com/google/apis-client-generator从发现文档生成 c# 客户端。当我生成我的文件时,我遇到了一些命名冲突,但在解决这些冲突后,它就可以工作了。
- 3 回答
- 0 关注
- 143 浏览
添加回答
举报