Adicionar autenticação à sua aplicação iOS

Neste tutorial, vai adicionar autenticação ao projeto de início rápido do iOS com um fornecedor de identidade suportado. Este tutorial baseia-se no tutorial de início rápido do iOS , que tem de concluir primeiro.

Registe a sua aplicação para autenticação e configure o Serviço de Aplicações

Primeiro, tem de registar a sua aplicação no site de um fornecedor de identidade e, em seguida, irá definir as credenciais geradas pelo fornecedor no back-end das Aplicações Móveis.

  1. Configure o seu fornecedor de identidade preferencial ao seguir as instruções específicas do fornecedor:

  2. Repita os passos anteriores para cada fornecedor que pretende suportar na sua aplicação.

Adicionar a sua aplicação aos URLs de Redirecionamento Externo Permitidos

A autenticação segura requer que defina um novo esquema de URL para a sua aplicação. Isto permite que o sistema de autenticação redirecione novamente para a sua aplicação assim que o processo de autenticação estiver concluído. Neste tutorial, utilizamos o nome da aplicação do esquema de URL. No entanto, pode utilizar qualquer esquema de URL que escolher. Deve ser exclusivo para a sua aplicação móvel. Para ativar o redirecionamento no lado do servidor:

  1. No portal do Azure, selecione o seu Serviço de Aplicações.

  2. Clique na opção de menu Autenticação/Autorização .

  3. Clique em Azure Active Directory na secção Fornecedores de Autenticação .

  4. Defina o Modo de gestão como Avançado.

  5. Nos URLs de Redirecionamento Externo Permitidos, introduza appname://easyauth.callback. O nome da aplicação nesta cadeia é o Esquema de URL da sua aplicação móvel. Deve seguir a especificação de URL normal para um protocolo (utilizar apenas letras e números e começar com uma letra). Deve tomar nota da cadeia que escolher, pois terá de ajustar o código da aplicação móvel com o Esquema de URL em vários locais.

  6. Clique em OK.

  7. Clique em Guardar.

Restringir permissões a utilizadores autenticados

Por predefinição, as APIs num back-end das Aplicações Móveis podem ser invocadas anonimamente. Em seguida, tem de restringir o acesso apenas a clientes autenticados.

  • Node.js back-end (através do portal do Azure) :

    Nas suas definições de Aplicações Móveis, clique em Tabelas Fáceis e selecione a sua tabela. Clique em Alterar permissões, selecione Acesso autenticado apenas para todas as permissões e, em seguida, clique em Guardar.

  • Back-end do .NET (C#):

    No projeto do servidor, navegue para Controllers>TodoItemController.cs. Adicione o [Authorize] atributo à classe TodoItemController , da seguinte forma. Para restringir o acesso apenas a métodos específicos, também pode aplicar este atributo apenas a esses métodos em vez da classe. Voltar a publicar o projeto do servidor.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js back-end (através do código Node.js) :

    Para exigir a autenticação para o acesso à tabela, adicione a seguinte linha ao script do servidor Node.js:

      table.access = 'authenticated';
    

    Para obter mais detalhes, veja How to: Require authentication for access to tables (Como: Exigir autenticação para aceder a tabelas). Para saber como transferir o projeto de código de início rápido a partir do seu site, consulte Como: Transferir o projeto de código de início rápido de back-end Node.js com o Git.

No Xcode, prima Executar para iniciar a aplicação. É gerada uma exceção porque a aplicação tenta aceder ao back-end como um utilizador não autenticado, mas a tabela TodoItem necessita agora de autenticação.

Adicionar autenticação à aplicação

Objective-C:

  1. No seu Mac, abra QSTodoListViewController.m no Xcode e adicione o seguinte método:

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

    Altere o google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver a utilizar o Google como fornecedor de identidade. Se utilizar o Facebook, tem de permitir a lista de domínios do Facebook na sua aplicação.

    Substitua o urlScheme por um nome exclusivo para a sua aplicação. O urlScheme deve ser o mesmo que o protocolo esquema de URL que especificou no campo URLs de Redirecionamento Externo Permitidos no portal do Azure. O urlScheme é utilizado pela chamada de retorno de autenticação para voltar à sua aplicação após a conclusão do pedido de autenticação.

  2. Substitua [self refresh] no QSTodoListViewController.m pelo seguinte viewDidLoad código:

    [self loginAndGetData];
    
  3. Abra o ficheiro QSAppDelegate.h e adicione-o ao seguinte código:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Abra o ficheiro QSAppDelegate.m e adicione-o ao seguinte código:

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

    Adicione este código diretamente antes da leitura #pragma mark - Core Data stackda linha . Substitua o nome da aplicação pelo valor urlScheme que utilizou no passo 1.

  5. Abra o AppName-Info.plist ficheiro (substituindo AppName pelo nome da sua aplicação) e adicione o seguinte código:

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

    Este código deve ser colocado dentro do <dict> elemento. Substitua a cadeia appname (na matriz para CFBundleURLSchemes) pelo nome da aplicação que escolheu no passo 1. Também pode fazer estas alterações no editor plist - clique no AppName-Info.plist ficheiro no XCode para abrir o editor plist.

    Substitua a com.microsoft.azure.zumo cadeia para CFBundleURLName pelo identificador do pacote da Apple.

  6. Prima Executar para iniciar a aplicação e, em seguida, inicie sessão. Quando tiver sessão iniciada, deverá conseguir ver a lista Todo e efetuar atualizações.

Swift:

  1. No seu Mac, abra ToDoTableViewController.swift no Xcode e adicione o seguinte método:

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

    Altere o google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver a utilizar o Google como fornecedor de identidade. Se utilizar o Facebook, tem de colocar os domínios do Facebook na lista de permissões na sua aplicação.

    Substitua o urlScheme por um nome exclusivo para a sua aplicação. O urlScheme deve ser o mesmo que o protocolo esquema de URL que especificou no campo URLs de Redirecionamento Externo Permitidos no portal do Azure. O urlScheme é utilizado pela chamada de retorno de autenticação para voltar à sua aplicação após a conclusão do pedido de autenticação.

  2. Remova as linhas self.refreshControl?.beginRefreshing() e self.onRefresh(self.refreshControl) , no final de viewDidLoad()toDoTableViewController.swift. Adicione uma chamada ao respetivo loginAndGetData() local:

    loginAndGetData()
    
  3. Abra o AppDelegate.swift ficheiro e adicione a seguinte linha à AppDelegate classe:

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

    Substitua o nome da aplicação pelo valor urlScheme que utilizou no passo 1.

  4. Abra o AppName-Info.plist ficheiro (substituindo AppName pelo nome da sua aplicação) e adicione o seguinte código:

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

    Este código deve ser colocado dentro do <dict> elemento. Substitua a cadeia appname (na matriz para CFBundleURLSchemes) pelo nome da aplicação que escolheu no passo 1. Também pode fazer estas alterações no editor plist - clique no AppName-Info.plist ficheiro no XCode para abrir o editor plist.

    Substitua a com.microsoft.azure.zumo cadeia para CFBundleURLName pelo identificador do pacote da Apple.

  5. Prima Executar para iniciar a aplicação e, em seguida, inicie sessão. Quando tiver sessão iniciada, deverá conseguir ver a lista Todo e efetuar atualizações.

Serviço de Aplicações Authentication utiliza a Apples Inter-App Communication. Para obter mais detalhes sobre este assunto, consulte a Documentação da Apple