Compartilhar via


Adicionar autenticação ao aplicativo Xamarin.iOS

Visão geral

Este tópico mostra como autenticar usuários de um Aplicativo Móvel do Serviço de Aplicativos a partir de seu aplicativo do cliente. Neste tutorial, você adicionará autenticação ao projeto de início rápido do Xamarin.iOS usando um provedor de identidade compatível com o Serviço de Aplicativo. Depois de ser autenticado e autorizado com êxito pelo aplicativo móvel, o valor da ID do usuário é exibido e você poderá acessar dados restritos da tabela.

Primeiro, você deve concluir o tutorial Criar um aplicativo Xamarin.iOS. Se você não usar o projeto de servidor de início rápido baixado, deverá adicionar o pacote de extensão de autenticação ao seu projeto. Para obter mais informações sobre pacotes de extensão de servidor, consulte Work with the .NET back-end server SDK for Azure Mobile Apps.

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

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

  1. Configure seu provedor de identidade preferencial seguindo as instruções específicas do provedor:

  2. Repita as etapas anteriores para cada provedor que você deseja dar suporte em seu aplicativo.

Adicionar seu aplicativo às URLs de Redirecionamento Externo Permitidas

A autenticação segura requer que você defina um novo esquema de URL para seu aplicativo. Isso permite que o sistema de autenticação redirecione de volta para seu aplicativo depois que o processo de autenticação for concluído. Neste tutorial, usamos o esquema de URL appname ao longo. No entanto, você pode usar qualquer esquema de URL escolhido. Ele deve ser exclusivo para seu aplicativo móvel. Para habilitar o redirecionamento no lado do servidor:

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

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

  3. Na seção URLs de Redirecionamento Externo Permitidas, insira url_scheme_of_your_app://easyauth.callback. O url_scheme_of_your_app nessa cadeia de caracteres é o Esquema de URL para seu aplicativo móvel. Ele deve seguir a especificação de URL normal para um protocolo (usar somente letras e números e começar com uma letra). Você deve anotar a cadeia de caracteres escolhida, pois precisará ajustar o código do aplicativo móvel com o Esquema de URL em vários locais.

  4. Clique em OK.

  5. Clique em Salvar.

Restringir permissões a usuários autenticados

Por padrão, as APIs em um back-end dos Aplicativos Móveis podem ser invocadas anonimamente. Em seguida, você precisa restringir o acesso somente a clientes autenticados.

  • Node.js backend (por meio do portal do Azure) :

    Em suas configurações de Aplicativos Móveis, clique em Tabelas Fáceis e selecione sua tabela. Clique em Alterar permissões, selecione Acesso autenticado somente para todas as permissões e clique em Salvar.

  • de back-end do .NET (C#):

    No projeto do servidor, navegue até Controladores>TodoItemController.cs. Adicione o [Authorize] atributo à classe TodoItemController , da seguinte maneira. Para restringir o acesso apenas a métodos específicos, você também pode aplicar esse atributo apenas a esses métodos em vez da classe. Publique novamente o projeto do servidor.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js backend (via código Node.js) :

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

      table.access = 'authenticated';
    

    Para obter mais detalhes, consulte Como exigir autenticação para acesso a 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 Node.js back-end usando o Git.

  • No Visual Studio ou no Xamarin Studio, execute o projeto cliente em um dispositivo ou emulador. Verifique se uma exceção sem tratamento com um código de status 401 (não autorizado) é gerada após o início do aplicativo. A falha é registrada no console do depurador. Portanto, no Visual Studio, você deverá ver a falha na janela de saída.

    Essa falha não autorizada ocorre porque o aplicativo tenta acessar o back-end do Aplicativo Móvel como um usuário não autenticado. A tabela TodoItem agora requer autenticação.

Em seguida, você atualizará o aplicativo cliente para solicitar recursos do back-end do Aplicativo Móvel com um usuário autenticado.

Adicionar autenticação ao aplicativo

Nesta seção, você modificará o aplicativo para exibir uma tela de logon antes de exibir dados. Quando o aplicativo for iniciado, ele não se conectará ao Serviço de Aplicativo e não exibirá nenhum dado. Após a primeira vez que o usuário executar o gesto de atualização, a tela de logon será exibida; após um logon bem-sucedido, a lista de tarefas a fazer será exibida.

  1. No projeto do cliente, abra o arquivo QSTodoService.cs e adicione a seguinte declaração "using" e o acessador MobileServiceUser à classe QSTodoService:

    using UIKit;
    
    // Logged in user
    private MobileServiceUser user;
    public MobileServiceUser User { get { return user; } }
    
  2. Adicione um novo método chamado Authenticate ao QSTodoService com a seguinte definição:

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

    Observação

    Se você estiver usando um provedor de identidade diferente de um Facebook, altere o valor passado para LoginAsync acima para um dos seguintes: MicrosoftAccount, Twitter, Google ou WindowsAzureActiveDirectory.

  3. Abra QSTodoListViewController.cs. Modifique a definição de método de ViewDidLoad removendo a chamada para RefreshAsync() perto do final:

    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. Modifique o método RefreshAsync para verificar se a propriedade User é nula. Adicione o seguinte código na parte superior da definição do método:

    // 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. Abra AppDelegate.cs, adicione o seguinte método:

    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. Abra o arquivo Info.plist , navegue até Tipos de URL na seção Avançado . Agora, configure o Identificador e os Esquemas de URL do tipo de URL e clique em Adicionar Tipo de URL. Os esquemas de URL devem ser iguais aos {url_scheme_of_your_app}.

  7. No Visual Studio, conectado ao Host do Mac ou ao Visual Studio para Mac, execute o projeto cliente direcionado para um dispositivo ou emulador. Verifique se o aplicativo não exibe dados.

    Execute o gesto de atualização puxando para baixo a lista de itens, o que fará com que a tela de logon apareça. Depois de inserir credenciais válidas com êxito, o aplicativo exibirá a lista de tarefas e você poderá atualizar os dados.