Dodawanie uwierzytelniania do aplikacji platformy Xamarin.Android
Omówienie
W tym temacie przedstawiono sposób uwierzytelniania użytkowników aplikacji mobilnej z aplikacji klienckiej. W tym samouczku dodasz uwierzytelnianie do projektu szybkiego startu przy użyciu dostawcy tożsamości obsługiwanego przez usługę Azure Mobile Apps. Po pomyślnym uwierzytelnieniu i autoryzacji w aplikacji mobilnej zostanie wyświetlona wartość identyfikatora użytkownika.
Ten samouczek jest oparty na przewodniku Szybki start aplikacji mobilnej. Należy również najpierw ukończyć samouczek Tworzenie aplikacji platformy Xamarin.Android. Jeśli nie używasz pobranego projektu serwera Szybki start, musisz dodać pakiet rozszerzenia uwierzytelniania do projektu. Aby uzyskać więcej informacji na temat pakietów rozszerzeń serwera, zobacz Praca z zestawem SDK serwera zaplecza platformy .NET dla usługi Azure Mobile Apps.
Rejestrowanie aplikacji w celu uwierzytelniania i konfigurowanie App Services
Najpierw należy zarejestrować aplikację w witrynie dostawcy tożsamości, a następnie ustawić poświadczenia wygenerowane przez dostawcę w Mobile Apps back end.
Skonfiguruj preferowanego dostawcę tożsamości, zgodnie z instrukcjami specyficznymi dla dostawcy:
Powtórz poprzednie kroki dla każdego dostawcy, którego chcesz obsługiwać w aplikacji.
Dodawanie aplikacji do adresów URL dozwolonego zewnętrznego przekierowania
Bezpieczne uwierzytelnianie wymaga zdefiniowania nowego schematu adresu URL dla aplikacji. Dzięki temu system uwierzytelniania może przekierować z powrotem do aplikacji po zakończeniu procesu uwierzytelniania. W tym samouczku używamy nazwy aplikacji schematu adresu URL w całym. Możesz jednak użyć dowolnego schematu adresów URL, który wybierzesz. Powinna być unikatowa dla Twojej aplikacji mobilnej. Aby włączyć przekierowanie po stronie serwera:
Na stronie [Azure Portal] wybierz App Service.
Kliknij opcję menu Uwierzytelnianie/ autoryzacja.
W adresie URL dozwolonego zewnętrznego przekierowania wprowadź .
url_scheme_of_your_app://easyauth.callback
Wartością url_scheme_of_your_app w tym ciągu jest schemat adresu URL aplikacji mobilnej. Powinna być zgodne ze specyfikacją standardowego adresu URL dla protokołu (należy używać tylko liter i cyfr i rozpoczynać się literą). Należy zanotować ciąg, który wybierzesz, ponieważ konieczne będzie dostosowanie kodu aplikacji mobilnej za pomocą schematu adresu URL w kilku miejscach.Kliknij przycisk OK.
Kliknij pozycję Zapisz.
Ograniczanie uprawnień do uwierzytelnionych użytkowników
Domyślnie interfejsy API w Mobile Apps mogą być wywoływane anonimowo. Następnie należy ograniczyć dostęp tylko do uwierzytelnionych klientów.
Node.js (za pośrednictwem Azure Portal):
W ustawieniach Mobile Apps kliknij pozycję Łatwe tabele i wybierz tabelę. Kliknij pozycję Zmień uprawnienia, wybierz opcję Dostęp uwierzytelniony tylko dla wszystkich uprawnień, a następnie kliknij przycisk Zapisz.
.NET back end (C#):
W projekcie serwera przejdź do plikówControllersTodoItemController.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, a nie do klasy . Ponownie opublikować projekt serwera.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js zaplecza (za pośrednictwem Node.js kodu):
Aby wymagać uwierzytelniania w celu uzyskania dostępu do tabeli, dodaj następujący wiersz do Node.js skryptu serwera:
table.access = 'authenticated';
Aby uzyskać więcej informacji, zobacz Uwierzytelnianie wymagane w celu uzyskania dostępu do tabel. Aby dowiedzieć się, jak pobrać projekt kodu szybkiego startu ze swojej witryny, zobacz How to: Download the Node.js backend quickstart code project using Git (Jak pobrać projekt kodu zaplecza przy użyciu usługi Git).
W Visual Studio lub Xamarin Studio uruchom projekt klienta na urządzeniu lub emulatorze. Sprawdź, czy nieobsługiwany wyjątek z kodem stanu 401 (Brak autoryzacji) jest wywoływany po uruchamianiu aplikacji. Dzieje się tak, ponieważ aplikacja próbuje uzyskać dostęp do zaplecza aplikacji mobilnej jako nieuwierzytowany użytkownik. Tabela TodoItem wymaga teraz uwierzytelniania.
Następnie zaktualizujemy aplikację kliency, aby zażądać 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 i uwierzytelnienia przed rozpoczęciem wyświetlania danych.
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(); }
Powoduje 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 identyfikatora logowania w serwisie 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ą do loginAsync powyżej na jedną z następujących wartości: MicrosoftAccount, Twitter, Google lub WindowsAzureActiveDirectory.
W metodzie OnCreate usuń lub wykomentuj następujący wiersz kodu:
OnRefreshItemsSelected ();
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" />
Dodaj następujący element do Strings.xml zasobów:
<string name="login_button_text">Sign in</string>
Otwórz plik AndroidManifest.xml dodaj następujący kod wewnątrz elementu
<application>
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>
W 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 identyfikator logowania i listę zadań do zalogowania, a także będzie można wprowadzić aktualizacje danych.
Rozwiązywanie problemów
Aplikacja ulega awarii z Java.Lang.NoSuchMethodError: No static method startActivity
W niektórych przypadkach konflikty w pakietach pomocy technicznej wyświetlane jako ostrzeżenie w programie Visual Studio, ale 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 usługi Azure Mobile Apps ma zależność Xamarin.Android.Support.CustomTabs
dla platformy Android, więc jeśli projekt używa nowszych pakietów dla pomocy technicznej, musisz bezpośrednio zainstalować ten pakiet w wymaganej wersji w celu uniknięcia konfliktów.