Sonntag , 25 August 2019

Windows Azure Mobile Services – Single Sign-on via Live Connect für Windows Store Apps

Windows Azure Mobile Services - Windows Account Authentifizierung für Windows Store AppsBislang müssen sich die Benutzer der Windows Store App aus meiner Windows Azure Mobile Services Serie bei jedem Start erneut anmelden.
Dies kann man natürlich niemanden zumuten!
Deshalb dreht es sich im heutigen Teil um die Single Sign-on Funktionalität, die durch Live Connect für Windows Store Apps angeboten wird…

Installation des Live SDKs

Für die Installation des Live SDKs bieten sich wie gewohnt mehrere Wege an.

Zum Einen kann das Live SDK auf dem ganzen Rechner zur Verfügung gestellt werden, in dem man das Live SDK for Windows installiert.

Alternativ können die benötigten Dateien nur das jeweilige Projekt mit Hilfe von NuGet bereitgestellt werden:

NuGet Command für das Live SDK

 

Änderungen an der Windows Store App

Um die Benutzer der Windows Store App mittels Live SDK authentifizieren zu können, habe ich das ViewModel mit einem LiveAuthClient-Objekt erweitert, …

private readonly LiveAuthClient _liveAuthClient;

public MainPageViewModel()
{
  _mobileServiceClient = new MobileServiceClient(
    App.MobileServiceUrl,
    App.MobileServiceKey,
    new BusyHandler(busy => IsBusy = busy));

  _liveAuthClient = new LiveAuthClient(App.MobileServiceUrl);

  /* ... gekürzter Code-Auszug ... */
}

 

… den bisherige Authentifizierung-Aufruf aus der Authenticate-Methode entfernt …

await _mobileServiceClient.LoginAsync(
  MobileServiceAuthenticationProvider.MicrosoftAccount);

 

… und neue Authentifizierung implementiert:

private async Task Authenticate()
{
  if (_mobileServiceClient.CurrentUser != null) return;

  var message = String.Empty;
  try
  {
    IsAuthenticated = false;

    var scopes = new[] {"wl.signin", "wl.basic", 
                        "wl.emails", "wl.offline_access"};

    // Try to use offline/cached Live Connect session
    var result = await _liveAuthClient.InitializeAsync(scopes);
                
    // If this doesn't work, try regular login
    if (result.Status != LiveConnectSessionStatus.Connected)
      result = await _liveAuthClient.LoginAsync(scopes);

    // Login to Windows Azure Mobile Services using the Live Connect token
    if (result.Status == LiveConnectSessionStatus.Connected)
    {
      await _mobileServiceClient.LoginWithMicrosoftAccountAsync(
        result.Session.AuthenticationToken);
    }
    else
    {
      message = "login unsuccessful";
    }
  }
  catch (InvalidOperationException)
  {
    message = "login unsuccessful";
  }
  catch (Exception ex)
  {
    message = ex.Message;
  }
  if (!String.IsNullOrEmpty(message))
    await new MessageDialog(message, "Authenticate User").ShowAsync();
}

 

Die neue Authentifizierung besteht dabei als folgenden Einzelschritten:

  1. Definition der benötigten Bereiche bzw. Berechtigungen (scopes)
    (Eine Liste der verfügbaren Bereiche und Berechtigungen findet man unter diesem Link
  2. Um weniger Roundtrips zu erzeugen, wurde die Berechtigung zum Offline-Zugriff angefordert (wl.offline_access).
    Mit der InitializeAsync-Methode wird daher geprüft, ob der Benutzer auch ohne Netzwerkzugriff angemeldet werden kann.
  3. Wenn dies nicht möglich ist, wird dieser regulär via LoginAsync angemeldet.
  4. Falls die Anmeldung via Live SDK erfolgreich war, wird der zurückgelieferte Authentifizierungstoken dazu genutzt den Benutzer an den Mobile Services anzumelden.

 

Die App mit dem Windows Store verbinden

Wenn man jetzt allerdings versucht die App laufen zu lassen, wird man über folgende Fehlermeldung stolpern:

 

Grund hierfür ist fehlende, vertrauenswürdige Verbindung zwischen der App und dem Windows Store.

Um die App mit dem Store zu verbinden, wählt man über das Kontextmenü des Projektes den Menüpunkt "Associate App with the Store…" aus: 

Danach öffnet sich der entsprechende Assistent, um sich am Windows Store anmelden und die bereits registrierte App auswählen zu können: 

 

 

Falls man noch keine App registriert hat, kann man dies hier nachholen.

 

Wenn man nun die App erneut startet, öffnet sich der Dialog des Live SDK's, der eine Bestätigung der angeforderten Berechtigungen abfragt:

 

Wie geht es weiter?

Im nächsten Teil dieser Serie wird die Windows Store App mit einem Registrierungsdialog erweitert um fehlende Daten des Benutzers abfragen zu können.