Hinzufügen der Authentifizierung zu Ihrer Xamarin.iOS-App
Übersicht
In diesem Thema wird die Authentifizierung von Benutzern einer mobilen App Service-App über Ihre Clientanwendung veranschaulicht. In diesem Lernprogramm fügen Sie dem Xamarin.iOS-Schnellstartprojekt durch Verwenden eines von App Service unterstützten Identitätsanbieters eine Authentifizierungsfunktion hinzu. Nach der erfolgreichen Authentifizierung und Autorisierung durch Ihre mobile App wird die Benutzer-ID angezeigt und Sie erhalten Zugriff auf beschränkte Tabellendaten.
Sie müssen zunächst das Lernprogramm Erstellen einer Xamarin.iOS-Appabschließen. Wenn Sie das heruntergeladene Schnellstart-Serverprojekt nicht verwenden, müssen Sie Ihrem Projekt das Authentifizierungs-Erweiterungspaket hinzufügen. Weitere Informationen zu Servererweiterungspaketen finden Sie unter Work with the .NET backend server SDK for Azure Mobile Apps(in englischer Sprache).
Registrieren Ihrer App für die Authentifizierung und Konfigurieren von App Services
Zuerst müssen Sie Ihre App auf der Website eines Identitätsanbieters registrieren und anschließend die vom Anbieter generierten Anmeldeinformationen im Mobile Apps-Back-End festlegen.
Konfigurieren Sie Ihren bevorzugten Identitätsanbieter anhand der anbieterspezifischen Anweisungen:
Wiederholen Sie die oben stehenden Schritte für jeden Anbieter, den Sie in Ihrer App unterstützen möchten.
Hinzufügen Ihrer App zu den zulässigen externen Umleitungs-URLs
Eine sichere Authentifizierung erfordert, dass Sie ein neues URL-Schema für Ihre App definieren. Dies ermöglicht dem Authentifizierungssystem die erneute Umleitung an Ihre App, sobald der Authentifizierungsprozess abgeschlossen ist. In diesem Tutorial verwenden wir ausschließlich das URL-Schema appname. Sie können jedoch ein beliebiges URL-Schema auswählen und verwenden. Es sollte für Ihre mobile Anwendung eindeutig sein. So aktivieren Sie die Umleitung auf der Serverseite
Wählen Sie im Azure-Portal App Service aus.
Klicken Sie auf die Menüoption Authentifizierung/Autorisierung.
Geben Sie in Zulässige externe Umleitungs-URLs
url_scheme_of_your_app://easyauth.callback
ein. url_scheme_of_your_app steht in dieser Zeichenfolge für das URL-Schema für Ihre mobile Anwendung. Es sollte der normalen URL-Spezifikation für ein Protokoll folgen (nur aus Buchstaben und Zahlen bestehen und mit einem Buchstaben beginnen). Notieren Sie sich die gewählte Zeichenfolge, da Sie später Ihren mobilen Anwendungscode mehrfach mit dem URL-Schema anpassen müssen.Klicken Sie auf OK.
Klicken Sie auf Speichern.
Einschränken von Berechtigungen für authentifizierte Benutzer
Standardmäßig können APIs auf Mobile Apps-Back-Ends anonym aufgerufen werden. Als Nächstes müssen Sie den Zugriff auf authentifizierte Clients beschränken.
Node.js-Back-End (über das Azure-Portal):
Klicken Sie in den Einstellungen von Mobile Apps auf Einfache Tabellen, und wählen Sie Ihre Tabelle aus. Klicken Sie auf Berechtigungen ändern, wählen Sie für alle Berechtigungen Authenticated access only (Nur authentifizierter Zugriff) aus, und klicken Sie auf Speichern.
.NET-Back-End (C#):
Navigieren Sie im Serverprojekt zu ControllersTodoItemController.cs>. Fügen Sie das
[Authorize]
-Attribut der TodoItemController-Klasse wie folgt hinzu: Um den Zugriff auf bestimmte Methoden zu beschränken, können Sie dieses Attribut auch nur auf diese Methoden anstelle der Klasse anwenden. Veröffentlichen Sie das Serverprojekt erneut.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js-Back-End (über Node.js-Code) :
Um für den Zugriff auf Tabellen eine Authentifizierung anzufordern, fügen Sie die folgende Zeile in das Node.js-Serverskript ein:
table.access = 'authenticated';
Ausführlichere Informationen finden Sie unter Erzwingen der Authentifizierung für den Zugriff auf Tabellen. Informationen zum Herunterladen des Schnellstart-Codeprojekts von Ihrer Website finden Sie unter Herunterladen des Schnellstart-Codeprojekts für das Node.js-Back-End mithilfe von Git.
Führen Sie das Clientprojekt in Visual Studio oder Xamarin Studio auf einem Gerät oder Emulator aus. Stellen Sie sicher, dass ein Ausnahmefehler mit dem Statuscode 401 (Nicht autorisiert) angezeigt wird, nachdem die App gestartet wurde. Der Fehler wird in der Konsole des Debuggers protokolliert. Daher sollte in Visual Studio der Fehler im Ausgabefenster angezeigt werden.
Dieser Fehler des Typs „Nicht autorisiert“ kommt vor, weil die App versucht, als nicht authentifizierter Benutzer auf Ihr Mobile App-Back-End zuzugreifen. Die Tabelle TodoItem erfordert jetzt eine Authentifizierung.
Als Nächstes aktualisieren Sie die Client-App, um Ressourcen vom mobilen App-Back-End mit einem authentifizierten Benutzer zu aktualisieren.
Hinzufügen von Authentifizierung zur App
In diesem Abschnitt modifizieren Sie die App, sodass vor der Anzeige von Daten ein Anmeldebildschirm angezeigt wird. Wenn die App gestartet wird, baut sie keine Verbindung zu App Service auf und zeigt keinerlei Daten an. Nachdem der Benutzer die Aktualisierungsgeste durchführt, wird der Anmeldebildschirm angezeigt, nach der erfolgreichen Anmeldung dann die Liste von To-Do-Objekten.
Öffnen Sie im Clientprojekt die Datei QSTodoService.cs, und fügen Sie der QSTodoService-Klasse nachstehende using-Anweisung und
MobileServiceUser
mit Accessor hinzu:using UIKit; // Logged in user private MobileServiceUser user; public MobileServiceUser User { get { return user; } }
Fügen Sie die neue Methode Authenticate mit der folgenden Definition zu QSTodoService hinzu:
public async Task Authenticate(UIViewController view) { try { AppDelegate.ResumeWithURL = url => url.Scheme == "{url_scheme_of_your_app}" && client.ResumeWithURL(url); user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); } catch (Exception ex) { Console.Error.WriteLine (@"ERROR - AUTHENTICATION FAILED {0}", ex.Message); } }
Hinweis
Falls Sie einen anderen Identitätsanbieter als Facebook verwenden, ändern Sie den an LoginAsync übergebenen Wert in einen der folgenden Werte: MicrosoftAccount, Twitter, Google oder WindowsAzureActiveDirectory.
Öffnen Sie QSTodoListViewController.cs. Ändern Sie die Methodendefinition von ViewDidLoad, und entfernen Sie den Aufruf von RefreshAsync() am Ende:
public override async void ViewDidLoad () { base.ViewDidLoad (); todoService = QSTodoService.DefaultService; await todoService.InitializeStoreAsync(); RefreshControl.ValueChanged += async (sender, e) => { await RefreshAsync(); } // Comment out the call to RefreshAsync // await RefreshAsync(); }
Ändern Sie die Methode RefreshAsync für die Authentifizierung, wenn die Eigenschaft User null ist. Fügen Sie folgenden Code oben in der Methodendefinition hinzu:
// start of RefreshAsync method if (todoService.User == null) { await QSTodoService.DefaultService.Authenticate(this); if (todoService.User == null) { Console.WriteLine("couldn't login!!"); return; } } // rest of RefreshAsync method
Öffnen Sie AppDelegate.cs, und fügen Sie die folgende Methode hinzu:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { if (client.ResumeWithURL(app, url, options)) return true; return base.OpenUrl(app, url, options); }
Öffnen Sie die Datei Info.plist, und navigieren Sie im Abschnitt Erweitert zu URL-Typen. Konfigurieren Sie nun Bezeichner und URL-Schemas Ihres URL-Typs, und klicken Sie auf URL-Typ hinzufügen. URL-Schemas sollte mit „{url_scheme_of_your_app}“ identisch sein.
Führen Sie in Visual Studio mit Verbindung zum Mac-Host oder in Visual Studio für Mac das Clientprojekt auf einem Gerät oder Emulator aus. Überprüfen Sie, dass die App keine Daten anzeigt.
Führen Sie die Aktualisierungsgeste durch Herunterziehen der Objektliste, was die Anzeige des Anmeldebildschirms auslöst. Nachdem Sie erfolgreich gültige Anmeldeinformationen eingegeben haben, zeigt die App die Liste der To-Do-Objekte an, und Sie können die Daten ändern.