Momentan beschäftige ich mich ziemlich viel mit Live Services und weiteren Kameraden die noch nicht offiziell angekündigt sind. Ein interessanter Aspekt bezüglich der Windows Live ID ist die Tatsache das ich die Windows Live ID zum Authentifizieren in einer Windows Anwendungen benutzen kann. Sprich, ich nutze die Windows Live ID Infrastruktur um Benutzer zu authentifizieren und auf Grundlage der zurückgegebenen Benutzer-ID kann ich mir die Benutzerspezifischen Einstellungen aus dem entsprechenden Store laden.

Alles was man hierzu benötigt ist das Windows Live ID Client SDK. Ist dieses installiert fügt man das Assembly Microsoft.WindowsLive.Id.Client zu seinem Projekt hinzu und implementiert nun die Anbindung.

Zuerst muss man einen IdentityManager erstellen, für diesen benötigt man eine Anwendungs-ID die im folgenden aus der Firma, einer Kontakt-Email und dem Anwendungsnamen besteht. Hier ein Beispiel für das Erzeugen des IdentityManager Objekts

   1: IdentityManager manager = null;
   2:  
   3: manager = IdentityManager.CreateInstance( "Microsoft Deutschland GmbH;" +
   4:                                            "dparys@microsoft.com;" +
   5:                                            "Dariusz's Windows Live Demo",
   6:                                            "Dariusz's Windows Live Demo" );

Mittels des IdentityManager kann man nun eine Windows Live Identität im Code erhalten indem man ein Identity Objekt erstellt. Das Identity Objekt selbst hat nun eine Methode Namens Authenticate(). Diese instanziert ein Authentifizierungsdialog der Windows Live ID Infrastruktur um den Benutzer zu authentifizieren.

   1: Identity identity = manager.CreateIdentity();
   2: identity.Authenticate();

Das Identity Objekt lässt sich nun nach diversen Eigenschaften Abfragen. Username, cId, IsAuthenticated und SavedCredentials sind die wichtigsten. SavedCredentials erlaubt es uns auch den Authorisation String mittels ExportAuthString() abzufragen und zu speichern.

Hier ein Stück Code aus einem WPF Client der das ganze in einen ScrollViewer Control visualisiert.

   1: liveId.SignIn();
   2:  
   3: StringBuilder builder = new StringBuilder();
   4: builder.AppendFormat( "Username: {0}", liveId.Identity.UserName );
   5: builder.AppendLine();
   6: builder.AppendFormat( "cId: {0}", liveId.Identity.cId );
   7: builder.AppendLine();
   8: builder.AppendFormat( "IsAuthenticated: {0}", liveId.Identity.IsAuthenticated );
   9: builder.AppendLine();
  10: builder.AppendFormat( "SavedCredentials: {0}", liveId.Identity.SavedCredentials );
  11: builder.AppendLine();
  12: if( liveId.Identity.IsAuthenticated )
  13: {
  14:     builder.AppendFormat( "ExportAuthString: {0}", liveId.Identity.ExportAuthString() );
  15:     builder.AppendLine();
  16: }
  17: outputLiveID.Content = builder.ToString();

liveId ist hier eine Instanz meiner LiveID Helper Klasse die lediglich die Funktionalität bezüglich IdentityManager und Identity kapselt.

shot1

Die Anwendung sieht recht spartanisch aus, drückt man den entsprechenden Button "Sign In to Windows Live" erscheint nun der Windows Live ID Authentifizierungsdialog, mit unserem Anwendungsnamen eingebunden.

shot2

Nach erfolgreicher Eingabe des Benutzernamens samt Passwort, werden die Eigenschaften aus dem Identity Objekt ausgewertet und in den ScrollViewer geschrieben.

shot3

Die cId habe ich unkenntlich gemacht. Interessant ist das man per SavedCredentials auslesen kann, was der Benutzer auf dem Rechner speichern lies. In diesem Beispiel nur den Benutzernamen, ich hätte ja auch noch das Passwort auswählen können. In letzterem Fall könnte so eine Anwendung auch einen Silent Sign-In machen um den Benutzer automatisch anzumelden. Diese Entscheidung liegt natürlich beim Benutzer. Das ist das gleiche Prinzip wie beim Live Messenger.

Beim nächsten Post über Windows Live werde ich auf die Einbindung in eigene Webanwendungen eingehen. Neben der traditionellen Einbindung zur Authentifizierung in Webanwendungen werde ich auch einen Blick auf die Funktionalität im Rahmen von delegierten Rechten eingehen.