-1

我試圖在使用AAD B2C的Xamarin.Forms應用程序中設置一個刷新令牌。當我撥打我的MobileServiceClient上的LoginAsync時,我已經設置了一切,但遇到問題。所有的docs和例子我能找到演出來更新我的LoginAsync方法是:在AAD B2C中使用刷新令牌與Azure App Service和Xamarin.Forms

var user = await App.MobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, 
    new Dictionary<string, string>() { { "response_type", "code id_token" } }); 

除將MobileServiceClient不採取Dictionary<string, string>第二個參數。這需要JObject。這裏是我當前的代碼是什麼樣子:

var authResult = await App.AuthenticationClient.AcquireTokenAsync(Constants.Scopes, "", UiOptions.SelectAccount, string.Empty, null, Constants.Authority, Constants.Policy); 

var payload = new JObject(); 
payload["access_token"] = authResult.Token; 

var user = await App.MobileServiceClient.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

我無法找到一個例子使用JObject任何地方。
這與將payload["response_type"] = "code id_token";添加到我的有效載荷一樣簡單?

+0

你解決了這個問題嗎,你需要進一步的幫助嗎? –

回答

-1

AFAIK,移動應用程序支持兩種驗證流程(client-managed flowserver-managed flow)。

客戶端管理的認證

您的應用程序可以獨立聯繫身份提供程序,然後在登錄時提供返回的標記與後端。通過此客戶端流程,您可以爲用戶提供單一登錄體驗或從身份提供商檢索其他用戶數據。您檢索到的令牌

後,那麼你將與你的蔚藍行動後端通過傳送令牌到JObject實例如下登錄:

JObject payload = new JObject(); 
payload["access_token"] = ar.AccessToken; 
var user = await client.LoginAsync(MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory, payload); 

有關其他標識提供者通過客戶端流量的詳細信息認證,你可以參考Client-managed authentication

服務器管理的認證

您的應用程序直接接觸行動後端,那麼你的蔚藍行動後端接觸身份提供商,並提供你的登錄用戶。

  • 對於Xamarin.Forms UWP的應用程序,你可以登錄如下:

enter image description here

  • 對於Xamarin.Forms IOS應用程序,你可以登錄如下:enter image description here

有關Xamarin.Forms中服務器管理的身份驗證的更多詳細信息,請參閱Add authentication to your Xamarin Forms app

UPDATE:

我已籤,如果您在PCL叫MobileServiceClient.LoginAsync,你看不到任何擴展LoginAsync。如您所見,Microsoft.WindowsAzure.Mobile.Ext.dll中的每個平臺都有很多擴展LoginAsync方法。您需要定義IAuthenticate接口並在您的每個應用程序(uwp,android,ios等)中實現它,以獲取更多詳細信息,請參閱here

+0

那些來自你的現場項目的截圖?因爲我的Microsoft.Azure.Mobile.Client版本是'portable-win + net45 + wp8 + wpa81 + monotouch + monoandroid \ Microsoft.WindowsAzure.Mobile.dll',這是NuGet的最新完整版本。它沒有LoginAsync()和Dictionary參數。 – Marcus

+1

它看起來像服務器和客戶端流程的唯一區別在於客戶端流程使用'AcquireTokenAsync()'方法中的令牌並將其傳遞到'LoginAsync()'方法的'payload'中。 – Marcus

+0

根據你的評論,我假設你在你的PCL中調用了「MobileServiceClient.LoginAsync」。正如你所看到的,在每個平臺的'Microsoft.WindowsAzure.Mobile.Ext.dll'中有許多擴展'LoginAsync'方法。您需要定義'IAuthenticate'接口並在您的每個應用程序(uwp,android,ios等)中實現它,以獲取更多詳細信息,請參閱[此處](https://docs.microsoft.com/zh-cn/ -us /天藍色/應用服務,移動/應用服務,移動xamarin表單-GET-開始用戶#添加認證到的便攜類庫)。 –

相關問題