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 關注
- 193 瀏覽
添加回答
舉報