Dodawanie uwierzytelniania do aplikacji platformy Xamarin.iOS

Omówienie

W tym temacie przedstawiono sposób uwierzytelniania użytkowników aplikacji App Service Mobile App z aplikacji klienckiej. W tym samouczku dodasz uwierzytelnianie do projektu szybkiego startu platformy Xamarin.iOS przy użyciu dostawcy tożsamości obsługiwanego przez App Service. Po pomyślnym uwierzytelnieniu i autoryzacji przez aplikację mobilną zostanie wyświetlona wartość identyfikatora użytkownika i będzie można uzyskać dostęp do ograniczonych danych tabeli.

Najpierw należy ukończyć samouczek Tworzenie aplikacji platformy Xamarin.iOS. 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.

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

  2. 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:

  1. W Azure Portal wybierz swój App Service.

  2. Kliknij opcję menu Uwierzytelnianie/ autoryzacja.

  3. 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.

  4. Kliknij przycisk OK.

  5. 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. Błąd jest rejestrowany w konsoli debugera. W Visual Studio danych wyjściowych powinien zostać wyświetlony błąd.

    Ten nieautoryzowany błąd występuje, ponieważ aplikacja próbuje uzyskać dostęp do zaplecza aplikacji mobilnej jako nieuwierzytany 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

W tej sekcji zmodyfikujesz aplikację tak, aby wyświetlała ekran logowania przed wyświetleniem danych. Gdy aplikacja zostanie uruchamiana, nie będzie nawiązywać połączenia z App Service i nie będzie wyświetlać żadnych danych. Po pierwszym wykonaniu gestu odświeżania przez użytkownika zostanie wyświetlony ekran logowania. Po pomyślnym zalogowaniu zostanie wyświetlona lista zadań do zalogowania.

  1. W projekcie klienta otwórz plik QSTodoService.cs i dodaj następującą instrukcje using MobileServiceUser oraz z użyciem klasy QSTodoService:

    using UIKit;
    
    // Logged in user
    private MobileServiceUser user;
    public MobileServiceUser User { get { return user; } }
    
  2. Dodaj nową metodę o nazwie Authenticate to QSTodoService z następującą definicją:

    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);
        }
    }
    

    Uwaga

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

  3. Otwórz pliki QSTodoListViewController.cs. Zmodyfikuj definicję metody ViewDidLoad, usuwając wywołanie metody RefreshAsync() pod koniec:

    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();
    }
    
  4. Zmodyfikuj metodę RefreshAsync , aby uwierzytelniać się, jeśli właściwość User ma wartość null. Dodaj następujący kod w górnej części definicji metody:

    // 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
    
  5. Otwórz aplikację AppDelegate.cs i dodaj następującą metodę:

    public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
    {
        if (client.ResumeWithURL(app, url, options))
            return true;
        return base.OpenUrl(app, url, options);
    }
    
  6. Otwórz plik Info.plist i przejdź do sekcji Typy adresów URLw sekcji Zaawansowane. Teraz skonfiguruj identyfikator i schematy adresów URL typu adresu URL, a następnie kliknij pozycję Dodaj typ adresu URL. Schematy adresów URL powinny być takie same jak twoje {url_scheme_of_your_app}.

  7. W Visual Studio na komputerze Mac Host lub Visual Studio dla komputerów Mac uruchom projekt klienta przeznaczony dla urządzenia lub emulatora. Sprawdź, czy aplikacja nie wyświetla żadnych danych.

    Wykonaj gest odświeżania, ściągając listę elementów, co spowoduje, że zostanie wyświetlony ekran logowania. Po pomyślnym wprowadzeniu prawidłowych poświadczeń aplikacja wyświetli listę zadań do odbierania i będzie można wprowadzać aktualizacje danych.