簡體   English   中英

代表Azure移動后端-MS Graph

[英]On-Behalf-Of Azure Mobile backend - MS Graph

另一個圍繞我一個月的問題提出另一個問題的嘗試:

我現在正嘗試啟動“按比例收取”流程,以在用戶使用Microsoft帳戶登錄時獲取MS Graph令牌。 如此處所述: https : //docs.microsoft.com/zh-cn/azure/active-directory/develop/active-directory-v2-protocols-oauth-on-behalf-of

在客戶端上,用戶使用服務器流登錄:

var user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.MicrosoftAccount);

在.NET后端,我試圖檢索MS Graph令牌:

string clientId = "id-shown-in-app-registration-portal";
string clientSecret = "secret-shown-in-app-registration-portal";
IEnumerable<string> msIdTokenOut = null;
Request.Headers.TryGetValues("x-ms-token-microsoftaccount-access-token", out msIdTokenOut);
string msIdToken = msIdTokenOut.FirstOrDefault();
AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/common/oauth2/v2.0");
UserAssertion assertion = new UserAssertion(msIdToken);
ClientCredential cred = new ClientCredential(clientId, clientSecret);
AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com/", cred, assertion);

我收到以下錯誤:aadsts50027:無效的jwt令牌。 令牌格式無效。

我嘗試了所有可能的組合,從使用服務器流到登錄,為客戶端流使用MSAL(不會使用檢索到的令牌對App Services進行身份驗證)。 這使我抓狂了一個多月了。 我不敢相信我已經跳了多少圈才能使2個Microsoft產品一起工作。 如果有人可以引導我尋求解決方案,我將不勝感激。

這是一種解決方法,我建議您可以使用MSAL返回的訪問令牌來啟用移動服務器自定義身份驗證。

更多詳細信息,您可以參考以下步驟:

首先,您可以創建一個登錄頁面,該頁面將通過Microsoft帳戶使用MSAL登錄。 它將返回訪問令牌。

然后,您可以將帶有訪問令牌的請求發送到移動服務后端,以請求身份驗證。

注意:后端中用於檢查訪問令牌的邏輯是正確的,您需要自己實現。 您可以解碼訪問jwt令牌以獲得aud值。 如果此值與客戶端ID相同,則意味着用戶有權訪問移動后端數據。

然后,您可以使用jwt令牌從圖形api獲取用戶信息。 獲取用戶信息之后,可以將用戶信息值設置為Claims以生成身份驗證令牌(使用此方法AppServiceLoginHandler.CreateToken [添加Microsoft.Azure.Mobile.Server.Login NuGet包])。 通過使用此令牌,移動客戶端用戶可以訪問移動后端。

像這樣的訪問令牌:

在此處輸入圖片說明

更多詳細信息,您可以參考本文以了解如何在移動后端中啟用自定義身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM