Sdílet prostřednictvím


Přidání ověřování do aplikace pro iOS

V tomto kurzu přidáte ověřování do projektu rychlého startu pro iOS pomocí podporovaného zprostředkovatele identity. Tento kurz je založený na úvodním kurzu pro iOS , který musíte nejprve dokončit.

Registrace aplikace pro ověřování a konfigurace služby App Service

Nejprve je potřeba zaregistrovat aplikaci na webu zprostředkovatele identity a pak v back-endu Mobile Apps nastavit přihlašovací údaje vygenerované zprostředkovatelem.

  1. Nakonfigurujte svého upřednostňovaného poskytovatele identity podle pokynů specifických pro poskytovatele:

  2. Opakujte předchozí kroky pro každého poskytovatele, kterého chcete ve své aplikaci podporovat.

Přidání aplikace do povolených adres URL pro externí přesměrování

Zabezpečené ověřování vyžaduje, abyste definovali nové schéma adres URL pro vaši aplikaci. Systém ověření tak může po dokončení ověřovacího procesu přesměrovat zpět k vaší aplikaci. V tomto kurzu používáme schéma adresy URL appname v celém textu. Můžete ale použít libovolné schéma adres URL, které zvolíte. Měla by být jedinečná pro vaši mobilní aplikaci. Povolení přesměrování na straně serveru:

  1. Na webu Azure Portal vyberte svou službu App Service.

  2. Klikněte na možnost Ověřování / Autorizace.

  3. V části Zprostředkovatelé ověřování klikněte na Azure Active Directory.

  4. Nastavte režim správy na Upřesnit.

  5. Do povolených adres URL externího přesměrování zadejte appname://easyauth.callback. Appname v tomto řetězci je URL schéma pro vaši mobilní aplikaci. Měl by dodržovat normální specifikaci adresy URL pro protokol (používejte jenom písmena a číslice a začněte písmenem). Měli byste si poznamenat řetězec, který zvolíte, protože budete muset upravit kód mobilní aplikace pomocí schématu adresy URL na několika místech.

  6. Klikněte na OK.

  7. Klikněte na Uložit.

Omezení oprávnění pro ověřené uživatele

Ve výchozím nastavení je možné rozhraní API v back-endu Mobile Apps vyvolat anonymně. Dále je potřeba omezit přístup jenom na ověřené klienty.

  • Backend Node.js (prostřednictvím portálu Azure):

    V nastavení Mobile Apps klikněte na Snadné tabulky a vyberte tabulku. Klepněte na tlačítko Změnit oprávnění, vyberte Ověřený přístup pouze pro všechna oprávnění a potom klepněte na tlačítko Uložit.

  • .NET backend (C#):

    V projektu serveru přejděte na Kontrolery>TodoItemController.cs. Přidejte atribut [Authorize] do třídy TodoItemController následujícím způsobem. Chcete-li omezit přístup pouze na konkrétní metody, můžete tento atribut použít pouze u těchto metod místo třídy. Znovu publikujte projekt serveru.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js zázemí (prostřednictvím Node.js kódu):

    Pokud chcete vyžadovat ověřování pro přístup k tabulce, přidejte do skriptu serveru Node.js následující řádek:

      table.access = 'authenticated';
    

    Další podrobnosti najdete v tématu Postupy: Vyžadování ověřování pro přístup k tabulkám. Informace o tom, jak stáhnout projekt kódu pro rychlý start z webu, můžete najít v tématu Postupy: Stažení projektu kódu rychlého startu Node.js backendu pomocí Gitu.

V Xcode spusťte aplikaci stisknutím klávesy Spustit . Vyvolá se výjimka, protože aplikace se pokusí o přístup k back-endu jako neověřený uživatel, ale tabulka TodoItem teď vyžaduje ověření.

Přidání ověřování do aplikace

Objective-C:

  1. Na počítači Mac otevřete QSTodoListViewController.m v Xcode a přidejte následující metodu:

    - (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];
            }
        }];
    }
    

    Pokud google nepoužíváte jako svého zprostředkovatele identity, změňte google na microsoftaccount, twitter, facebook nebo windowsazureactivedirectory . Pokud používáte Facebook, musíte ve své aplikaci zařadit domény Facebooku na seznam povolených.

    Nahraďte urlScheme jedinečným názvem vaší aplikace. Adresa URLScheme by měla být stejná jako protokol schématu adres URL, který jste zadali v poli Povolené adresy URL externího přesměrování na webu Azure Portal. Zpětné volání ověřování používá urlScheme k návratu do vaší aplikace po dokončení žádosti o ověření.

  2. Nahraďte [self refresh] v viewDidLoadQSTodoListViewController.m následujícím kódem:

    [self loginAndGetData];
    
  3. Otevřete soubor QSAppDelegate.h a přidejte následující kód:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Otevřete soubor QSAppDelegate.m a přidejte následující kód:

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

    Přidejte tento kód přímo před řádek #pragma mark - Core Data stack. Nahraďte název aplikace hodnotou urlScheme, kterou jste použili v kroku 1.

  5. AppName-Info.plist Otevřete soubor (nahraďte AppName názvem aplikace) a přidejte následující kód:

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

    Tento kód by měl být umístěn uvnitř elementu <dict> . Nahraďte řetězec názvu aplikace (v rámci pole pro CFBundleURLSchemes) názvem aplikace, který jste zvolili v kroku 1. Tyto změny můžete provést také v editoru plist – kliknutím na AppName-Info.plist soubor v XCode otevřete editor plist.

    com.microsoft.azure.zumo Nahraďte řetězec cfBundleURLName identifikátorem sady Apple.

  6. Stisknutím klávesy Run spusťte aplikaci a pak se přihlaste. Po přihlášení byste měli být schopni zobrazit seznam úkolů a provádět aktualizace.

Swift:

  1. Na macu otevřete ToDoTableViewController.swift v Xcode a přidejte následující metodu:

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

    Pokud google nepoužíváte jako svého zprostředkovatele identity, změňte google na microsoftaccount, twitter, facebook nebo windowsazureactivedirectory . Pokud používáte Facebook, musíte ve své aplikaci zahrnout facebookové domény na seznam povolených .

    Nahraďte urlScheme jedinečným názvem vaší aplikace. Adresa URLScheme by měla být stejná jako protokol schématu adres URL, který jste zadali v poli Povolené adresy URL externího přesměrování na webu Azure Portal. Zpětné volání ověřování používá urlScheme k přepnutí zpět do vaší aplikace po dokončení požadavku na ověření.

  2. Odeberte řádky self.refreshControl?.beginRefreshing() a self.onRefresh(self.refreshControl) na konci viewDidLoad() ve ToDoTableViewController.swift. Přidejte volání na loginAndGetData() na místo nich:

    loginAndGetData()
    
  3. AppDelegate.swift Otevřete soubor a přidejte do AppDelegate třídy následující řádek:

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

    Nahraďte název aplikace hodnotou urlScheme, kterou jste použili v kroku 1.

  4. AppName-Info.plist Otevřete soubor (nahraďte AppName názvem aplikace) a přidejte následující kód:

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

    Tento kód by měl být umístěn uvnitř elementu <dict> . Nahraďte řetězec názvu aplikace (v rámci pole pro CFBundleURLSchemes) názvem aplikace, který jste zvolili v kroku 1. Tyto změny můžete provést také v editoru plist – kliknutím na AppName-Info.plist soubor v XCode otevřete editor plist.

    Nahraďte řetězec com.microsoft.azure.zumo pro CFBundleURLName svým identifikátorem balíčku Apple.

  5. Stisknutím klávesy Run spusťte aplikaci a pak se přihlaste. Po přihlášení byste měli být schopni zobrazit seznam úkolů a provádět aktualizace.

Ověřování služby App Service používá Apples Inter-App Communication. Další podrobnosti o tomto tématu najdete v dokumentaci společnosti Apple.