-1

Ich versuche, ein Aktualisierungs-Token in meiner Xamarin.Forms App mithilfe von AAD B2C einzurichten. Ich habe alles eingerichtet, aber Probleme beim Aufruf LoginAsync auf meinem MobileServiceClient. Alle der docs und Beispiele kann ich zeigen, finde meine LoginAsync Methode, dies zu aktualisieren:Verwenden eines Aktualisierungs-Tokens in AAD B2C mit Azure App Service und Xamarin.Forms

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

Abgesehen davon, dass die MobileServiceClient ein Dictionary<string, string> für den zweiten Parameter nicht nimmt. Es dauert eine JObject. Hier ist, was meine aktuellen Code wie folgt aussieht:

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); 

ich kein Beispiel die JObject überall benutzen finden.
Es ist so einfach wie Hinzufügen von payload["response_type"] = "code id_token"; zu meiner Nutzlast?

+0

Haben Sie dieses Problem gelöst, benötigen Sie weitere Unterstützung? –

Antwort

-1

AFAIK, Mobile Apps unterstützen zwei Authentifizierungsflüsse (client-managed flow und server-managed flow).

-Client-Managed-Authentifizierung

Ihre App können die Identity-Provider unabhängig kontaktieren und geben Sie dann den zurückgegebenen Token bei der Anmeldung mit Ihrem Backend. Mit diesem Clientablauf können Sie Benutzern eine einmalige Anmeldung ermöglichen oder zusätzliche Benutzerdaten vom Identitätsanbieter abrufen.

Nachdem Sie das Token abgerufen, dann würden Sie mit Ihrem azur mobilen Back-End anmelden, indem das Token in eine JObject Instanz zu übergeben, wie folgt:

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

Für weitere Informationen über andere Identitätsprovider über Client-Flow Authentifizierung, können Sie sich auf Client-managed authentication beziehen.

Server verwalteten Authentifizierung

Ihre App direkt in Kontakt mit Ihrem mobilen Back-End, dann azur mobiles Back-End in Kontakt mit den Identity-Provider und bieten Sie mit dem angemeldeten Benutzer.

  • Für Xamarin.Forms UWP-App Sie sich einloggen könnte wie folgt:

enter image description here

  • Für Xamarin.Forms IOS App, könnten Sie wie folgt anmelden: enter image description here

Weitere Informationen zur serververwalteten Authentifizierung in Xamarin.Forms finden Sie unter Add authentication to your Xamarin Forms app.

UPDATE:

ich überprüft haben, dass, wenn Sie MobileServiceClient.LoginAsync in PCL rufen Sie keine Erweiterungen für LoginAsync sehen konnte.Wie Sie sehen konnten, gibt es viele LoginAsync Methoden in der Microsoft.WindowsAzure.Mobile.Ext.dll für jede Plattform. Sie müssen die Schnittstelle IAuthenticate definieren und in jeder Ihrer App implementieren (uwp, android, ios usw.). Weitere Einzelheiten finden Sie unter here.

+0

Sind diese Screenshots von einem Live-Projekt von dir? Weil meine Version von Microsoft.Azure.Mobile.Client "portable-win + net45 + wp8 + wpa81 + monotouch + monoandroid \ Microsoft.WindowsAzure.Mobile.dll" ist, und das ist die letzte vollständige Version von NuGet. Und es hat nicht den LoginAsync() mit dem Parameter Dictionary. – Marcus

+1

Und es sieht so aus, als ob der einzige Unterschied zwischen Server- und Client-Flow darin besteht, dass der Client-Fluss das Token von der 'AcquireTokenAsync()' Methode verwendet und es in der 'LoginAsync()' Methode in '' payload' 'weiterleitet. – Marcus

+0

Laut Ihrem Kommentar habe ich angenommen, dass Sie den 'MobileServiceClient.LoginAsync' in Ihrer PCL aufrufen. Wie Sie sehen können, gibt es in der 'Microsoft.WindowsAzure.Mobile.Ext.dll' für jede Plattform viele' LoginAsync'-Methoden. Sie müssen die 'IAuthenticate'-Schnittstelle definieren und sie in jeder Ihrer App implementieren (uwp, android, ios, etc.), für weitere Details verweisen wir auf [hier] (https://docs.microsoft.com/de) -us/azure/app-service-mobil/app-service-mobile-xamarin-forms-get-started-users # add-authentication-to-the-portable-class-library). –

Verwandte Themen