Dodawanie uwierzytelniania do aplikacji systemu iOS

W tym samouczku dodasz uwierzytelnianie do projektu Szybkiego startu systemu iOS przy użyciu obsługiwanego dostawcy tożsamości. Ten samouczek jest oparty na samouczku Szybki start dla systemu iOS , który należy wykonać najpierw.

Rejestrowanie aplikacji na potrzeby uwierzytelniania i konfigurowanie App Service

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.

Dodawanie aplikacji 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żywamy nazwy aplikacji schematu adresów URL. Można jednak użyć dowolnego wybranego schematu adresu URL. Powinna być unikatowa dla aplikacji mobilnej. Aby włączyć przekierowanie po stronie serwera:

  1. W Azure Portal wybierz App Service.

  2. Kliknij opcję menu Uwierzytelnianie/autoryzacja .

  3. Kliknij pozycję Azure Active Directory w sekcji Dostawcy uwierzytelniania .

  4. Ustaw tryb zarządzania na wartość Zaawansowane.

  5. W polu Dozwolone zewnętrzne adresy URL przekierowania wprowadź wartość appname://easyauth.callback. Nazwa aplikacji w tym ciągu to schemat adresu URL aplikacji mobilnej. Powinna ona być zgodna ze standardową specyfikacją adresu URL protokołu (należy używać tylko liter i cyfr i zaczynać się literą). Należy zanotować wybrany ciąg, ponieważ musisz dostosować kod aplikacji mobilnej za pomocą schematu adresów URL w kilku miejscach.

  6. Kliknij przycisk OK.

  7. Kliknij pozycję 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 zaplecza (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 przycisk Zapisz.

  • Zaplecze platformy .NET (C#):

    W projekcie serwera przejdź do pliku Controllers>TodoItemController.cs. [Authorize] Dodaj atrybut 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>
    
  • zapleczeNode.js (za pośrednictwem kodu Node.js):

    Aby wymagać uwierzytelniania na potrzeby dostępu do tabel, 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 zaplecza Node.js zaplecza przy użyciu usługi Git.

W programie Xcode naciśnij pozycję Uruchom , aby uruchomić aplikację. Zgłaszany jest wyjątek, ponieważ aplikacja próbuje uzyskać dostęp do zaplecza jako nieuwierzytelniony użytkownik, ale tabela TodoItem wymaga teraz uwierzytelniania.

Dodawanie uwierzytelniania do aplikacji

Cel-C:

  1. Na komputerze Mac otwórz plik QSTodoListViewController.m w środowisku Xcode i dodaj następującą metodę:

    - (void)loginAndGetData
    {
        QSAppDelegate *appDelegate = (QSAppDelegate *)[UIApplication sharedApplication].delegate;
        appDelegate.qsTodoService = self.todoService;
    
        [self.todoService.client loginWithProvider:@"google" urlScheme:@"appname" controller:self animated:YES completion:^(MSUser * _Nullable user, NSError * _Nullable error) {
            if (error) {
                NSLog(@"Login failed with error: %@, %@", error, [error userInfo]);
            }
            else {
                self.todoService.client.currentUser = user;
                NSLog(@"User logged in: %@", user.userId);
    
                [self refresh];
            }
        }];
    }
    

    Zmień google na microsoftaccount, twitter, facebook lub windowsazureactivedirectory, jeśli nie używasz Google jako dostawcy tożsamości. Jeśli używasz serwisu Facebook, musisz zezwolić na domeny Facebook w swojej aplikacji.

    Zastąp wartość urlScheme unikatową nazwą aplikacji. Adres URLScheme powinien być taki sam jak protokół schematu adresów URL określony w polu Dozwolone zewnętrzne adresy URL przekierowania w Azure Portal. Funkcja urlScheme jest używana przez wywołanie zwrotne uwierzytelniania w celu przełączenia się z powrotem do aplikacji po zakończeniu żądania uwierzytelniania.

  2. Zastąp [self refresh] element w viewDidLoad pliku QSTodoListViewController.m następującym kodem:

    [self loginAndGetData];
    
  3. Otwórz plik QSAppDelegate.h i dodaj następujący kod:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Otwórz plik QSAppDelegate.m i dodaj następujący kod:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
    {
        if ([[url.scheme lowercaseString] isEqualToString:@"appname"]) {
            // Resume login flow
            return [self.qsTodoService.client resumeWithURL:url];
        }
        else {
            return NO;
        }
    }
    

    Dodaj ten kod bezpośrednio przed odczytem #pragma mark - Core Data stackwiersza . Zastąp nazwę aplikacji wartością urlScheme użytą w kroku 1.

  5. AppName-Info.plist Otwórz plik (zastępując ciąg AppName nazwą aplikacji), a następnie dodaj następujący kod:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    Ten kod powinien zostać umieszczony wewnątrz <dict> elementu . Zastąp ciąg nazwy aplikacji (w tablicy dla wartości CFBundleURLSchemes) nazwą aplikacji wybraną w kroku 1. Możesz również wprowadzić te zmiany w edytorze plist — kliknij AppName-Info.plist plik w programie XCode, aby otworzyć edytor plist.

    Zastąp com.microsoft.azure.zumo ciąg wartości CFBundleURLName identyfikatorem pakietu firmy Apple.

  6. Naciśnij przycisk Uruchom , aby uruchomić aplikację, a następnie zaloguj się. Po zalogowaniu powinno być możliwe wyświetlenie listy zadań do wykonania i wprowadzenie aktualizacji.

Swift:

  1. Na komputerze Mac otwórz plik ToDoTableViewController.swift w środowisku Xcode i dodaj następującą metodę:

    func loginAndGetData() {
    
        guard let client = self.table?.client, client.currentUser == nil else {
            return
        }
    
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.todoTableViewController = self
    
        let loginBlock: MSClientLoginBlock = {(user, error) -> Void in
            if (error != nil) {
                print("Error: \(error?.localizedDescription)")
            }
            else {
                client.currentUser = user
                print("User logged in: \(user?.userId)")
            }
        }
    
        client.login(withProvider:"google", urlScheme: "appname", controller: self, animated: true, completion: loginBlock)
    
    }
    

    Zmień google na microsoftaccount, twitter, facebook lub windowsazureactivedirectory, jeśli nie używasz Google jako dostawcy tożsamości. Jeśli używasz serwisu Facebook, musisz dodać domeny Facebook do listy dozwolonych w swojej aplikacji.

    Zastąp wartość urlScheme unikatową nazwą aplikacji. Adres URLScheme powinien być taki sam jak protokół schematu adresów URL określony w polu Dozwolone zewnętrzne adresy URL przekierowania w Azure Portal. Funkcja urlScheme jest używana przez wywołanie zwrotne uwierzytelniania w celu przełączenia się z powrotem do aplikacji po zakończeniu żądania uwierzytelniania.

  2. Usuń wiersze self.refreshControl?.beginRefreshing() i self.onRefresh(self.refreshControl) na końcu viewDidLoad() w pliku ToDoTableViewController.swift. Dodaj wywołanie metody w loginAndGetData() swoim miejscu:

    loginAndGetData()
    
  3. AppDelegate.swift Otwórz plik i dodaj następujący wiersz do AppDelegate klasy:

    var todoTableViewController: ToDoTableViewController?
    
    func application(_ application: UIApplication, openURL url: NSURL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.scheme?.lowercased() == "appname" {
            return (todoTableViewController!.table?.client.resume(with: url as URL))!
        }
        else {
            return false
        }
    }
    

    Zastąp nazwę aplikacji wartością urlScheme użytą w kroku 1.

  4. AppName-Info.plist Otwórz plik (zastępując ciąg AppName nazwą aplikacji), a następnie dodaj następujący kod:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    Ten kod powinien zostać umieszczony wewnątrz <dict> elementu . Zastąp ciąg nazwy aplikacji (w tablicy dla wartości CFBundleURLSchemes) nazwą aplikacji wybraną w kroku 1. Możesz również wprowadzić te zmiany w edytorze plist — kliknij AppName-Info.plist plik w programie XCode, aby otworzyć edytor plist.

    Zastąp com.microsoft.azure.zumo ciąg wartości CFBundleURLName identyfikatorem pakietu firmy Apple.

  5. Naciśnij przycisk Uruchom , aby uruchomić aplikację, a następnie zaloguj się. Po zalogowaniu powinno być możliwe wyświetlenie listy zadań do wykonania i wprowadzenie aktualizacji.

App Service Authentication używa usługi Apples Inter-App Communication. Aby uzyskać więcej informacji na ten temat, zapoznaj się z dokumentacją firmy Apple