Partilhar via


Adicione autenticação à sua aplicação Xamarin.iOS

Descrição Geral

Este tópico mostra-lhe como autenticar os utilizadores de uma Aplicação Móvel Serviço de Aplicações a partir da aplicação do seu cliente. Neste tutorial, adiciona-se autenticação ao projeto quickstart Xamarin.iOS utilizando um fornecedor de identidade que é suportado por Serviço de Aplicações. Depois de ter sido autenticado e autorizado com sucesso pela sua Aplicação Móvel, o valor de ID do utilizador é apresentado e poderá aceder a dados restritos da tabela.

Primeiro tem de completar o tutorial Criar uma aplicação Xamarin.iOS. Se não utilizar o projeto do servidor de arranque rápido descarregado, tem de adicionar o pacote de extensão de autenticação ao seu projeto. Para obter mais informações sobre pacotes de extensão do servidor, consulte Work with the .NET backend server SDK for Azure Mobile Apps.

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

Primeiro, precisa de registar a sua aplicação no site de um fornecedor de identidade, e depois vai definir as credenciais geradas pelo fornecedor nas Aplicações Móveis.

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

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

Adicione 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 de volta para a sua aplicação uma vez que o processo de autenticação esteja concluído. Neste tutorial, usamos o appname do esquema URL em toda a parte. No entanto, pode utilizar qualquer esquema de URL que escolha. Deve ser exclusivo da sua aplicação móvel. Para ativar a reorientação no lado do servidor:

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

  2. Clique na opção menu autenticação/autorização .

  3. Nos URLs de redirecionamento externo permitidos, insiraurl_scheme_of_your_app://easyauth.callback . O url_scheme_of_your_app nesta cadeia é o URL Scheme para a sua aplicação móvel. Deve seguir a especificação normal de URL para um protocolo (use apenas letras e números, e comece com uma letra). Deve tomar nota da cadeia que escolher, pois terá de ajustar o seu código de aplicação móvel com o Url Scheme em vários locais.

  4. Clique em OK.

  5. Clique em Guardar.

Restringir permissões a utilizadores autenticados

Por padrão, as APIs numa parte traseira de Aplicações Móveis podem ser invocadas de forma anónima. Em seguida, tem de restringir o acesso apenas a clientes autenticados.

  • Node.js parte de trás (através do portal do Azure) :

    Nas 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.

  • .NET back end (C#):

    No projeto do servidor, navegue para ControllersTodoItemController>.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. Republicar o projeto do servidor.

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

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

      table.access = 'authenticated';
    

    Para mais detalhes, consulte Como: Requera autenticação para acesso às tabelas. Para aprender a descarregar o projeto de código quickstart do seu site, consulte Como: Descarregue o projeto de código de arranque rápido de backend Node.js usando Git.

  • Em Visual Studio ou Xamarin Studio, executar o projeto do cliente em um dispositivo ou emulador. Verifique se uma exceção não manipulada com um código de estado de 401 (Não Autorizado) é levantada após o início da aplicação. A falha é registada na consola do depurador. Por isso, em Visual Studio, deve ver a falha na janela de saída.

    Esta falha não autorizada acontece porque a aplicação tenta aceder ao backend da sua Aplicação Móvel como um utilizador não autenticado. A tabela TodoItem agora requer autenticação.

Em seguida, irá atualizar a aplicação do cliente para solicitar recursos da Aplicação Móvel com um utilizador autenticado.

Adicionar autenticação à app

Nesta secção, irá modificar a aplicação para exibir um ecrã de login antes de apresentar dados. Quando a aplicação começar, não se ligará ao seu Serviço de Aplicações e não apresentará quaisquer dados. Após a primeira vez que o utilizador executa o gesto de atualização, aparecerá o ecrã de login; após o início de sessão com sucesso, será apresentada a lista de todos os itens.

  1. No projeto cliente, abra o ficheiro QSTodoService.cs e adicione o seguinte comunicado usando e MobileServiceUser com acessório para a classe QSTodoService:

    using UIKit;
    
    // Logged in user
    private MobileServiceUser user;
    public MobileServiceUser User { get { return user; } }
    
  2. Adicione um novo método denominado 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);
        }
    }
    

    Nota

    Se estiver a utilizar um fornecedor de identidade que não seja um Facebook, altere o valor passado para LoginAsync acima para um dos seguintes: MicrosoftAccount, Twitter, Google ou WindowsAzureActiveDirectory.

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

    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 autenticar se a propriedade do Utilizador for nula. Adicione o seguinte código no topo da definição de 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. Open AppDeegate.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 ficheiro Info.plist , navegue para URL Types na secção Avançado . Agora configure o Identificador e os Esquemas DE URL do seu Tipo URL e clique em Adicionar Tipo DE URL. Os esquemas url devem ser os mesmos que o seu {url_scheme_of_your_app}.

  7. Em Visual Studio, ligado ao seu Mac Host ou Visual Studio para Mac, executar o projeto do cliente direcionando um dispositivo ou emulador. Verifique se a aplicação não apresenta dados.

    Execute o gesto de atualização puxando para baixo a lista de itens, o que fará com que o ecrã de login apareça. Uma vez introduzido com sucesso credenciais válidas, a aplicação apresentará a lista de todos os itens, podendo então a sua introdução.