不確定這是否可能:我想從服務器流切換到本機客戶端流,以便爲我的用戶提供更好的身份驗證體驗。使用Azure AppService的原生Android/Google登錄
問題是Azure AppService需要一個「Web應用程序」OAUTH設置(包含客戶端ID和密碼),而本地登錄僅使用客戶端ID而非祕密。這意味着在電話上登錄後,我確實有Google令牌,但AppService不知道如何處理它並返回給我HTTP Unauthorized
。
手機客戶端SDK爲我提供了一個API,但這不適用於這種令牌。
var jObject = new JObject(
new JProperty("access_token", auth.AccessToken),
new JProperty("id_token", auth.IdToken));
await ServiceClient.LoginAsync(MobileServiceAuthenticationProvider.Google, jObject);
任何想法正確的方式來整合,而不必寫我自己的服務器端令牌驗證?
聖牛白蘭度,只是添加一個虛擬祕密ClientID工作!我在這裏有兩個問題:你是否發現了AppService中一個允許提交假令牌的嚴重安全漏洞,或者如果密鑰不匹配,Azure是否會驗證該令牌是否違背Google的公鑰基礎結構?請參閱https://developers.google.com/identity/sign-in/web/backend-auth#verify-the-integrity-of-the-id-token。 另外:我使用的密鑰僅限於Android應用。這意味着我的應用服務無法爲使用簡單認證的iOS客戶端服務,而不是? –
在我看來,使用服務器流時,祕密用於獲取訪問令牌。如果您使用客戶端流量,您將首先獲取訪問令牌和idtoken,並將其發送到後端。後端將解碼idtoken(jwt token),它包含觀衆。如果觀衆與google appid相同,並且用戶信息與idtoken數據相同,則會將auth令牌返回給客戶端。 –
如果您使用相同的appid在ios和android中獲取訪問令牌和標識令牌,則簡單驗證可以將正確的驗證令牌返回給客戶端。 –