Adicione autenticação ao seu aplicativo do iOS

Neste tutorial, você adicionará a autenticação ao projeto de início rápido do iOS usando um provedor de identidade com suporte. Este tutorial baseia-se no tutorial de início rápido do iOS , que você deve concluir primeiro.

Registrar seu aplicativo para autenticação e configurar o Serviço de Aplicativo

Primeiro, é necessário registrar seu aplicativo em um site do provedor de identidade. Em seguida, você definirá as credenciais geradas pelo provedor no back-end dos Aplicativos Móveis.

  1. Configure o provedor de identidade preferido, seguindo as instruções específicas do provedor:

  2. Repita as etapas anteriores para cada provedor ao qual você desejar dar suporte em seu aplicativo.

Adicionar seu aplicativo às URLs de redirecionamento externo permitidas

A autenticação segura exige que você defina um novo esquema de URL para seu aplicativo. Isso permite que o sistema de autenticação redirecione para seu aplicativo após a conclusão do processo de autenticação. Neste tutorial, usamos sempre o esquema de URL appname. No entanto, você pode usar o esquema de URL que quiser. Ele deve ser exclusivo para seu aplicativo móvel. Para habilitar o redirecionamento no lado do servidor:

  1. No Portal do Azure, selecione seu Serviço de Aplicativo.

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

  3. Clique em Azure Active Directory na seção Provedores de Autenticação.

  4. Defina o Modo de gerenciamento como Avançado.

  5. Em URLs de Redirecionamento Externo Permitidas, insira appname://easyauth.callback. O appname na cadeia de caracteres é o esquema de URL para seu aplicativo móvel. Ele deve seguir as especificações de URL normal para um protocolo (use somente letras e números e inicie com uma letra). Você deve anotar a cadeia de caracteres escolhida, já que precisará ajustar o código do aplicativo móvel com o esquema de URL em vários lugares.

  6. Clique em OK.

  7. Clique em Save (Salvar).

Restringir permissões a usuários autenticados

Por padrão, APIs em um back-end de Aplicativos Móveis podem ser chamadas de forma anônima. Em seguida, você precisa restringir o acesso somente aos clientes autenticados.

  • Back-end do Node.js (por meio do portal do Azure) :

    Nas configurações de seus Aplicativos Móveis, clique em Tabelas Fáceis e selecione a tabela. Clique em Alterar permissões, selecione Apenas acesso autenticado para todas as permissões e clique em Salvar.

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

    No projeto do servidor, navegue até Controladores>TodoItemController.cs. Adicione o atributo [Authorize] à classe TodoItemController , como a seguir. Para restringir o acesso somente aos métodos específicos, você também pode aplicar esse atributo apenas aos métodos, em vez de à classe. Republicar o projeto de servidor.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Back-end do Node.js (por meio de código Node.js) :

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

      table.access = 'authenticated';
    

    Para obter mais detalhes, veja Como exigir autenticação para acesso às tabelas. Para saber como baixar o projeto de código de início rápido do seu site, consulte Como baixar o projeto de código de início rápido de back-end do Node.js usando Git.

No Xcode, pressione Executar para iniciar o aplicativo. Uma exceção é criada porque o aplicativo tenta acessar o back-end como um usuário não autenticado, mas a tabela TodoItem agora exige autenticação.

Adicionar autenticação ao aplicativo

Objective-C:

  1. No 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 google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver usando o Google como seu provedor de identidade. Se você usar o Facebook, deverá permitir domínios do Facebook na lista de permissões em seu aplicativo.

    Substitua o urlScheme por um nome exclusivo para seu aplicativo. O urlScheme deve ser o mesmo que o protocolo de esquema de URL especificado no campo URLs de redirecionamento externo permitidas no portal do Azure. O urlScheme é usado pelo retorno de chamada de autenticação a fim de voltar para seu aplicativo depois que a solicitação de autenticação é concluída.

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

    [self loginAndGetData];
    
  3. Abra o arquivo QSAppDelegate.he adicione o seguinte código:

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Abra o arquivo QSAppDelegate.me adicione o 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 o código diretamente antes da linha que tem #pragma mark - Core Data stack. Substitua o nome do aplicativo pelo valor urlScheme que você usou na etapa 1.

  5. Abra o arquivo AppName-Info.plist (substituindo AppName pelo nome de seu aplicativo) 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>
    

    Esse código deve ser colocado dentro do elemento <dict>. Substitua a cadeia de caracteres appname (dentro da matriz de CFBundleURLSchemes) pelo nome do aplicativo que você escolheu na etapa 1. Você também pode fazer essas alterações no editor de plist: clique no arquivo AppName-Info.plist no XCode para abrir o editor de plist.

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

  6. Pressione Executar para iniciar o aplicativo e faça logon. Após ter feito o logon você poderá exibir a lista de Tarefas pendentes e fazer atualizações.

Swift:

  1. No 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 google para microsoftaccount, twitter, facebook ou windowsazureactivedirectory se não estiver usando o Google como seu provedor de identidade. Se estiver usando o Facebook, você precisará colocar os domínios do Facebook na lista de permissões de seu aplicativo.

    Substitua o urlScheme por um nome exclusivo para seu aplicativo. O urlScheme deve ser o mesmo que o protocolo de esquema de URL especificado no campo URLs de redirecionamento externo permitidas no portal do Azure. O urlScheme é usado pelo retorno de chamada de autenticação a fim de voltar para seu aplicativo depois que a solicitação de autenticação é concluída.

  2. Remova as linhas self.refreshControl?.beginRefreshing() e self.onRefresh(self.refreshControl) ao final de viewDidLoad() em ToDoTableViewController.swift. Adicione uma chamada para loginAndGetData() em seu lugar:

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

    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 do aplicativo pelo valor urlScheme que você usou na etapa 1.

  4. Abra o arquivo AppName-Info.plist (substituindo AppName pelo nome de seu aplicativo) 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>
    

    Esse código deve ser colocado dentro do elemento <dict>. Substitua a cadeia de caracteres appname (dentro da matriz de CFBundleURLSchemes) pelo nome do aplicativo que você escolheu na etapa 1. Você também pode fazer essas alterações no editor de plist: clique no arquivo AppName-Info.plist no XCode para abrir o editor de plist.

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

  5. Pressione Executar para iniciar o aplicativo e faça logon. Após ter feito o logon você poderá exibir a lista de Tarefas pendentes e fazer atualizações.

A autenticação do Serviço de Aplicativo usa a comunicação interaplicativos da Apple. Para obter mais detalhes sobre esse assunto, confira a documentação da Apple