Udostępnij za pośrednictwem


Dodawanie uwierzytelniania do aplikacji platformy Xamarin.Android

Przegląd

W tym temacie przedstawiono sposób uwierzytelniania użytkowników aplikacji mobilnej z poziomu aplikacji klienckiej. W tym samouczku dodasz uwierzytelnianie do projektu szybkiego startu przy użyciu dostawcy tożsamości obsługiwanego przez Azure Mobile Apps. Po pomyślnym uwierzytelnieniu i autoryzacji w aplikacji mobilnej zostanie wyświetlona wartość identyfikatora użytkownika.

Ten samouczek jest oparty na szybkim starcie aplikacji mobilnej. Najpierw należy ukończyć samouczek Tworzenie aplikacji platformy Xamarin.Android. Jeśli nie używasz pobranego projektu serwera Szybkiego startu, musisz dodać pakiet rozszerzenia uwierzytelniania do projektu. Aby uzyskać więcej informacji na temat pakietów rozszerzeń serwera, zobacz Work with the .NET backend server SDK for Azure Mobile Apps.

Rejestrowanie aplikacji pod kątem uwierzytelniania i konfigurowanie usług App Services

Najpierw należy zarejestrować aplikację w witrynie dostawcy tożsamości, a następnie ustawić poświadczenia wygenerowane przez dostawcę w zapleczu usługi Mobile Apps.

  1. Skonfiguruj preferowanego dostawcę tożsamości, postępując zgodnie z instrukcjami specyficznymi dla dostawcy:

  2. Powtórz poprzednie kroki dla każdego dostawcy, który chcesz obsługiwać w aplikacji.

Dodaj swoją aplikację do dozwolonych zewnętrznych adresów URL przekierowania

Bezpieczne uwierzytelnianie wymaga zdefiniowania nowego schematu adresów URL dla aplikacji. Dzięki temu system uwierzytelniania może przekierować z powrotem do aplikacji po zakończeniu procesu uwierzytelniania. W tym samouczku użyjemy schematu adresów URL nazwa_aplikacji. Można jednak użyć dowolnego wybranego schematu adresów URL. Powinna być unikatowa dla aplikacji mobilnej. Aby włączyć przekierowanie po stronie serwera:

  1. W witrynie [Azure Portal] wybierz usługę App Service.

  2. Kliknij opcję menu Uwierzytelnianie/autoryzacja.

  3. W dozwolone zewnętrzne adresy URL przekierowań, wprowadź url_scheme_of_your_app://easyauth.callback. url_scheme_of_your_app w tym ciągu znaków to schemat adresów URL dla aplikacji mobilnej. Powinna ona być zgodna ze standardową specyfikacją adresu URL protokołu (należy używać tylko liter i cyfr, a następnie zaczynać się literą). Należy zanotować wybrany ciąg, ponieważ musisz dostosować kod aplikacji mobilnej za pomocą schematu adresów URL w kilku miejscach.

  4. Kliknij przycisk OK.

  5. Kliknij przycisk Zapisz.

Ograniczanie uprawnień do uwierzytelnionych użytkowników

Domyślnie interfejsy API w zapleczu usługi Mobile Apps mogą być wywoływane anonimowo. Następnie należy ograniczyć dostęp tylko do uwierzytelnionych klientów.

  • Node.js część serwerowa (za pośrednictwem Azure Portal) :

    W ustawieniach usługi Mobile Apps kliknij pozycję Łatwe tabele i wybierz tabelę. Kliknij pozycję Zmień uprawnienia, wybierz pozycję Dostęp uwierzytelniony tylko dla wszystkich uprawnień, a następnie kliknij Zapisz.

  • zaplecze platformy .NET (C#):

    W projekcie serwera przejdź do Controllers>TodoItemController.cs. Dodaj atrybut [Authorize] do klasy TodoItemController w następujący sposób. Aby ograniczyć dostęp tylko do określonych metod, można również zastosować ten atrybut tylko do tych metod zamiast klasy. Ponownie opublikuj projekt serwera.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js zaplecze (za pomocą kodu Node.js) :

    Aby wymagać uwierzytelniania w celu uzyskania dostępu do tabeli, dodaj następujący wiersz do skryptu serwera Node.js:

      table.access = 'authenticated';
    

    Aby uzyskać więcej informacji, zobacz Instrukcje: wymaganie uwierzytelniania w celu uzyskania dostępu do tabel. Aby dowiedzieć się, jak pobrać projekt kodu szybkiego startu z witryny, zobacz Jak: Pobrać projekt kodu backend Node.js za pomocą Git.

W programie Visual Studio lub Xamarin Studio uruchom projekt klienta na urządzeniu lub emulatorze. Sprawdź, czy po uruchomieniu aplikacji jest zgłaszany nieobsługiwany wyjątek z kodem stanu 401 (Brak autoryzacji). Dzieje się tak, ponieważ aplikacja próbuje uzyskać dostęp do zaplecza aplikacji mobilnej jako nieuwierzytelniony użytkownik. Tabela todoItem wymaga teraz uwierzytelniania.

Następnie zaktualizujesz aplikację kliencją, aby zażądała zasobów z zaplecza aplikacji mobilnej przy użyciu uwierzytelnionego użytkownika.

Dodawanie uwierzytelniania do aplikacji

Aplikacja zostanie zaktualizowana, aby wymagać od użytkowników naciśnięcia przycisku Zaloguj się i uwierzytelnienia przed wyświetleniem danych.

  1. Dodaj następujący kod do klasy TodoActivity :

     // 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();
         }
     }
    
     public override void OnResume()
     {
         base.OnResume();
         Xamarin.Essentials.Platform.OnResume();
     }
    

    Spowoduje to utworzenie nowej metody uwierzytelniania użytkownika i procedury obsługi metody dla nowego przycisku Zaloguj . Użytkownik w powyższym przykładowym kodzie jest uwierzytelniany przy użyciu logowania do serwisu Facebook. Okno dialogowe służy do wyświetlania identyfikatora użytkownika po uwierzytelnieniu.

    Uwaga

    Jeśli używasz dostawcy tożsamości innego niż Facebook, zmień wartość przekazaną na LoginAsync powyżej na jedną z następujących wartości: MicrosoftAccount, Twitter, Google lub WindowsAzureActiveDirectory.

  2. W metodzie OnCreate usuń lub oznacz jako komentarz następujący wiersz kodu:

     OnRefreshItemsSelected ();
    
  3. W pliku Activity_To_Do.axml dodaj następującą definicję przycisku LoginUser przed istniejącym przyciskiem AddItem :

       <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. Dodaj następujący element do pliku zasobów Strings.xml:

     <string name="login_button_text">Sign in</string>
    
  5. Otwórz plik AndroidManifest.xml, dodaj następujący kod wewnątrz <application> elementu XML:

     <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. W programie Visual Studio lub Xamarin Studio uruchom projekt klienta na urządzeniu lub emulatorze i zaloguj się przy użyciu wybranego dostawcy tożsamości. Po pomyślnym zalogowaniu aplikacja wyświetli Twój identyfikator logowania oraz listę zadań do wykonania, a Ty będziesz mógł zaktualizować dane.

Rozwiązywanie problemów

Aplikacja uległa awarii Java.Lang.NoSuchMethodError: No static method startActivity

W niektórych przypadkach konflikty w pakietach pomocy technicznej są wyświetlane jako ostrzeżenie w Visual Studio, a aplikacja ulega awarii z tym wyjątkiem w czasie wykonywania. W takim przypadku należy upewnić się, że wszystkie pakiety pomocy technicznej, do których odwołuje się projekt, mają tę samą wersję. Pakiet NuGet Azure Mobile Apps ma zależności dla platformy Android, więc jeśli twój projekt korzysta z nowszych pakietów wsparcia, musisz zainstalować ten pakiet z wymaganą wersją bezpośrednio, aby uniknąć konfliktów.