Hinzufügen der Authentifizierung zu Ihrer Xamarin.Android-AppAdd authentication to your Xamarin.Android app

Hinweis

Visual Studio App Center unterstützt End-to-End- und integrierte Dienste, die für die Entwicklung mobiler Apps von zentraler Bedeutung sind.Visual Studio App Center supports end to end and integrated services central to mobile app development. Entwickler können Build-, Test- und Verteilungsdienste nutzen, um eine Pipeline für Continuous Integration und Delivery einzurichten.Developers can use Build, Test and Distribute services to set up Continuous Integration and Delivery pipeline. Nach der Bereitstellung der App können Entwickler den Status und die Nutzung ihrer App mithilfe der Analyse- und Diagnosedienste überwachen und mit Benutzern über den Pushdienst interagieren.Once the app is deployed, developers can monitor the status and usage of their app using the Analytics and Diagnostics services, and engage with users using the Push service. Entwickler können auch den Authentifizierungsdienst nutzen, um ihre Benutzer zu authentifizieren, und den Datendienst, um App-Daten dauerhaft in der Cloud zu speichern und zu synchronisieren.Developers can also leverage Auth to authenticate their users and Data service to persist and sync app data in the cloud.

Falls Sie Clouddienste in Ihre mobile Anwendung integrieren möchten, sollten Sie sich noch heute für App Center registrieren.If you are looking to integrate cloud services in your mobile application, sign up with App Center today.

ÜbersichtOverview

In diesem Thema wird die Authentifizierung von Benutzern einer mobilen App über Ihre Clientanwendung veranschaulicht.This topic shows you how to authenticate users of a Mobile App from your client application. In diesem Lernprogramm fügen Sie eine Authentifizierung zu dem Schnellstartprojekt hinzu. Sie verwenden dazu einen Identitätsanbieter, der von Azure Mobile Apps unterstützt wird.In this tutorial, you add authentication to the quickstart project using an identity provider that is supported by Azure Mobile Apps. Nach der erfolgreichen Authentifizierung und Autorisierung in Mobile Apps wird die Benutzer-ID angezeigt.After being successfully authenticated and authorized in the Mobile App, the user ID value is displayed.

Dieses Lernprogramm baut auf dem Mobile App-Schnellstart auf.This tutorial is based on the Mobile App quickstart. Sie müssen außerdem zunächst das Lernprogramm Erstellen einer Xamarin.Android-Appabschließen.You must also first complete the tutorial Create a Xamarin.Android app. Wenn Sie das heruntergeladene Schnellstart-Serverprojekt nicht verwenden, müssen Sie Ihrem Projekt das Authentifizierungs-Erweiterungspaket hinzufügen.If you do not use the downloaded quick start server project, you must add the authentication extension package to your project. Weitere Informationen zu Servererweiterungspaketen finden Sie unter Work with the .NET backend server SDK for Azure Mobile Apps(in englischer Sprache).For more information about server extension packages, see Work with the .NET backend server SDK for Azure Mobile Apps.

Registrieren Ihrer App für die Authentifizierung und Konfigurieren von App ServicesRegister your app for authentication and configure 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.First, you need to register your app at an identity provider's site, and then you will set the provider-generated credentials in the Mobile Apps back end.

  1. Konfigurieren Sie Ihren bevorzugten Identitätsanbieter anhand der anbieterspezifischen Anweisungen:Configure your preferred identity provider by following the provider-specific instructions:

  2. Wiederholen Sie die oben stehenden Schritte für jeden Anbieter, den Sie in Ihrer App unterstützen möchten.Repeat the previous steps for each provider you want to support in your app.

Hinzufügen Ihrer App zu den zulässigen externen Umleitungs-URLsAdd your app to the Allowed External Redirect URLs

Eine sichere Authentifizierung erfordert, dass Sie ein neues URL-Schema für Ihre App definieren.Secure authentication requires that you define a new URL scheme for your app. Dies ermöglicht dem Authentifizierungssystem die erneute Umleitung an Ihre App, sobald der Authentifizierungsprozess abgeschlossen ist.This allows the authentication system to redirect back to your app once the authentication process is complete. In diesem Tutorial verwenden wir ausschließlich das URL-Schema appname.In this tutorial, we use the URL scheme appname throughout. Sie können jedoch ein beliebiges URL-Schema auswählen und verwenden.However, you can use any URL scheme you choose. Es sollte für Ihre mobile Anwendung eindeutig sein.It should be unique to your mobile application. So aktivieren Sie die Umleitung auf der ServerseiteTo enable the redirection on the server side:

  1. Wählen Sie im [Azure-Portal] Ihre App Service-Instanz aus.In the [Azure portal], select your App Service.

  2. Klicken Sie auf die Menüoption Authentifizierung/Autorisierung.Click the Authentication / Authorization menu option.

  3. Geben Sie in Zulässige externe Umleitungs-URLs url_scheme_of_your_app://easyauth.callback ein.In the Allowed External Redirect URLs, enter url_scheme_of_your_app://easyauth.callback. url_scheme_of_your_app steht in dieser Zeichenfolge für das URL-Schema für Ihre mobile Anwendung.The url_scheme_of_your_app in this string is the URL Scheme for your mobile application. Es sollte der normalen URL-Spezifikation für ein Protokoll folgen (nur aus Buchstaben und Zahlen bestehen und mit einem Buchstaben beginnen).It should follow normal URL specification for a protocol (use letters and numbers only, and start with a letter). Notieren Sie sich die gewählte Zeichenfolge, da Sie später Ihren mobilen Anwendungscode mehrfach mit dem URL-Schema anpassen müssen.You should make a note of the string that you choose as you will need to adjust your mobile application code with the URL Scheme in several places.

  4. Klicken Sie auf OK.Click OK.

  5. Klicken Sie auf Speichern.Click Save.

Einschränken von Berechtigungen für authentifizierte BenutzerRestrict permissions to authenticated users

Standardmäßig können APIs auf Mobile Apps-Back-Ends anonym aufgerufen werden.By default, APIs in a Mobile Apps back end can be invoked anonymously. Als Nächstes müssen Sie den Zugriff auf authentifizierte Clients beschränken.Next, you need to restrict access to only authenticated clients.

  • Node.js-Back-End (über das Azure-Portal):Node.js back end (via the Azure portal) :

    Klicken Sie in den Einstellungen von Mobile Apps auf Einfache Tabellen, und wählen Sie Ihre Tabelle aus.In your Mobile Apps settings, click Easy Tables and select your table. Klicken Sie auf Berechtigungen ändern, wählen Sie für alle Berechtigungen Authenticated access only (Nur authentifizierter Zugriff) aus, und klicken Sie auf Speichern.Click Change permissions, select Authenticated access only for all permissions, and then click Save.

  • .NET-Back-End (C#):.NET back end (C#):

    Navigieren Sie im Serverprojekt zu Controller > TodoItemController.cs.In the server project, navigate to Controllers > TodoItemController.cs. Fügen Sie das [Authorize]-Attribut der TodoItemController-Klasse wie folgt hinzu:Add the [Authorize] attribute to the TodoItemController class, as follows. Um den Zugriff auf bestimmte Methoden zu beschränken, können Sie dieses Attribut auch nur auf diese Methoden anstelle der Klasse anwenden.To restrict access only to specific methods, you can also apply this attribute just to those methods instead of the class. Veröffentlichen Sie das Serverprojekt erneut.Republish the server project.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js-Back-End (über Node.js-Code) :Node.js backend (via 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:To require authentication for table access, add the following line to the Node.js server script:

      table.access = 'authenticated';
    

    Weitere Details finden Sie unter Gewusst wie: Erzwingen der Authentifizierung für den Zugriff auf Tabellen.For more details, see How to: Require authentication for access to tables. Informationen zum Herunterladen des Schnellstart-Codeprojekts von Ihrer Website finden Sie unter Vorgehensweise: Herunterladen des Schnellstart-Codeprojekts für das Node.js-Back-End mit Git.To learn how to download the quickstart code project from your site, see How to: Download the Node.js backend quickstart code project using Git.

Führen Sie das Clientprojekt in Visual Studio oder Xamarin Studio auf einem Gerät oder Emulator aus.In Visual Studio or Xamarin Studio, run the client project on a device or emulator. Stellen Sie sicher, dass ein Ausnahmefehler mit dem Statuscode 401 (Nicht autorisiert) angezeigt wird, nachdem die App gestartet wurde.Verify that an unhandled exception with a status code of 401 (Unauthorized) is raised after the app starts. Dies liegt daran, dass die App versucht, als nicht authentifizierter Benutzer auf Ihr Mobile App-Back-End zuzugreifen.This happens because the app attempts to access your Mobile App backend as an unauthenticated user. Die Tabelle TodoItem erfordert jetzt eine Authentifizierung.The TodoItem table now requires authentication.

Als Nächstes aktualisieren Sie die Client-App, um Ressourcen vom mobilen App-Back-End mit einem authentifizierten Benutzer zu aktualisieren.Next, you will update the client app to request resources from the Mobile App backend with an authenticated user.

Hinzufügen von Authentifizierung zur AppAdd authentication to the app

Die App wird so aktualisiert, dass Benutzer auf die Schaltfläche Anmelden tippen und sich authentifizieren müssen, bevor Daten angezeigt werden.The app is updated to require users to tap the Sign in button and authenticate before data is displayed.

  1. Fügen Sie der TodoActivity -Klasse den folgenden Code hinzu:Add the following code to the TodoActivity class:

     // Define an authenticated user.
     private MobileServiceUser user;
     private async Task<bool> Authenticate()
     {
             var success = false;
             try
             {
                 // Sign in with Facebook login using a server-managed flow.
                 user = await client.LoginAsync(this,
                     MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
                 CreateAndShowDialog(string.Format("you are now logged in - {0}",
                     user.UserId), "Logged in!");
    
                 success = true;
             }
             catch (Exception ex)
             {
                 CreateAndShowDialog(ex, "Authentication failed");
             }
             return success;
     }
    
     [Java.Interop.Export()]
     public async void LoginUser(View view)
     {
         // Load data only after authentication succeeds.
         if (await Authenticate())
         {
             //Hide the button after authentication succeeds.
             FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone;
    
             // Load the data.
             OnRefreshItemsSelected();
         }
     }
    

    Dies erstellt eine neue Methode zum Authentifizieren eines Benutzers und einen Methodenhandler für die neue Schaltfläche Anmelden .This creates a new method to authenticate a user and a method handler for a new Sign in button. Der Benutzer wird im Codebeispiel oben mithilfe eines Facebook-Logins authentifiziert.The user in the example code above is authenticated by using a Facebook login. Ein Dialogfeld wird verwendet, um die Benutzer-ID nach der Authentifizierung anzuzeigen.A dialog is used to display the user ID once authenticated.

    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.If you are using an identity provider other than Facebook, change the value passed to LoginAsync above to one of the following: MicrosoftAccount, Twitter, Google, or WindowsAzureActiveDirectory.

  2. Löschen Sie in der OnCreate -Methode die folgende Codezeile, oder kommentieren Sie sie aus:In the OnCreate method, delete or comment-out the following line of code:

     OnRefreshItemsSelected ();
    
  3. Fügen Sie in der Datei „Activity_To_Do.axml“ die folgende Definition der Schaltfläche LoginUser vor der vorhandenen Schaltfläche AddItem hinzu:In the Activity_To_Do.axml file, add the following LoginUser button definition before the existing AddItem button:

       <Button
         android:id="@+id/buttonLoginUser"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="LoginUser"
         android:text="@string/login_button_text" />
    
  4. Fügen Sie das folgende Element in die Ressourcendatei „Strings.xml“ ein:Add the following element to the Strings.xml resources file:

     <string name="login_button_text">Sign in</string>
    
  5. Öffnen Sie die Datei „AndroidManifest.xml“, und fügen Sie den folgenden Code im <application>-XML-Element hinzu:Open the AndroidManifest.xml file, add the following code inside <application> XML element:

     <activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" android:launchMode="singleTop" android:noHistory="true">
       <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
         <data android:scheme="{url_scheme_of_your_app}" android:host="easyauth.callback" />
       </intent-filter>
     </activity>
    
  6. Führen Sie das Clientprojekt in Visual Studio oder Xamarin Studio auf einem Gerät oder Emulator aus, und melden Sie sich mit dem ausgewählten Identitätsanbieter an.In Visual Studio or Xamarin Studio, run the client project on a device or emulator and sign in with your chosen identity provider. Nachdem Sie sich erfolgreich angemeldet haben, zeigt die App Ihre Login-ID und die Liste der zu erledigenden Elemente an, und Sie können die Daten ändern.When you are successfully logged-in, the app will display your login ID and the list of todo items, and you can make updates to the data.

ProblembehandlungTroubleshooting

Die Anwendung ist mit dem Fehler Java.Lang.NoSuchMethodError: No static method startActivity abgestürzt.The application crashed with Java.Lang.NoSuchMethodError: No static method startActivity

In einigen Fällen werden Konflikte in den Unterstützungspaketen nur als Warnung in Visual Studio angezeigt, aber die Anwendung stürzt zur Laufzeit mit dieser Ausnahme ab.In some cases, conflicts in the support packages displayed as just a warning in the Visual studio, but the application crashes with this exception at runtime. In diesem Fall müssen Sie sicherstellen, dass alle Unterstützungspakete, auf die in Ihrem Projekt verwiesen wird, die gleiche Version aufweisen.In this case you need to make sure that all the support packages referenced in your project have the same version. Das Azure Mobile Apps-NuGet-Paket hat eine Xamarin.Android.Support.CustomTabs-Abhängigkeit für die Android-Plattform. Wenn also das Projekt neuere Unterstützungspakete verwendet, müssen Sie dieses Paket direkt mit der erforderlichen Version installieren, um Konflikte zu vermeiden.The Azure Mobile Apps NuGet package has Xamarin.Android.Support.CustomTabs dependency for Android platform, so if your project uses newer support packages you need to install this package with required version directly to avoid conflicts.