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

Descrição Geral

Este tópico mostra-lhe como autenticar os utilizadores de uma Aplicação Móvel a partir da sua aplicação ao cliente. Neste tutorial, adiciona-se a autenticação ao projeto quickstart utilizando um fornecedor de identidade que é suportado pela Azure Mobile Apps. Depois de ter sido autenticado e autorizado com sucesso na Aplicação Móvel, é apresentado o valor de ID do utilizador.

Este tutorial baseia-se no arranque rápido da Aplicação Móvel. Você também deve completar primeiro o tutorial Criar uma aplicação Xamarin.Android. 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. No [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. Isto 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

A aplicação é atualizada para exigir que os utilizadores toquem no botão 'Sinal' e autenerem antes de os dados serem apresentados.

  1. Adicione o seguinte código à classe TodoActivity :

     // Define an authenticated user.
     private MobileServiceUser user;
     private async Task<bool> Authenticate()
     {
             var success = false;
             try
             {
                 // Sign in with Facebook login using a server-managed flow.
                 user = await client.LoginAsync(this,
                     MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}");
                 CreateAndShowDialog(string.Format("you are now logged in - {0}",
                     user.UserId), "Logged in!");
    
                 success = true;
             }
             catch (Exception ex)
             {
                 CreateAndShowDialog(ex, "Authentication failed");
             }
             return success;
     }
    
     [Java.Interop.Export()]
     public async void LoginUser(View view)
     {
         // Load data only after authentication succeeds.
         if (await Authenticate())
         {
             //Hide the button after authentication succeeds.
             FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone;
    
             // Load the data.
             OnRefreshItemsSelected();
         }
     }
    
     public override void OnResume()
     {
         base.OnResume();
         Xamarin.Essentials.Platform.OnResume();
     }
    

    Isto cria um novo método para autenticar um utilizador e um manipulador de métodos para um novo botão Sinal no botão. O utilizador no código de exemplo acima é autenticado através de um login no Facebook. É utilizado um diálogo para visualizar o ID do utilizador uma vez autenticado.

    Nota

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

  2. No método OnCreate , elimine ou comente a seguinte linha de código:

     OnRefreshItemsSelected ();
    
  3. No ficheiro Activity_To_Do.axml, adicione a seguinte definição de botão LoginUser antes do botão AddItem existente:

       <Button
         android:id="@+id/buttonLoginUser"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:onClick="LoginUser"
         android:text="@string/login_button_text" />
    
  4. Adicione o seguinte elemento ao ficheiro de recursos Strings.xml:

     <string name="login_button_text">Sign in</string>
    
  5. Abra o ficheiro AndroidManifest.xml, adicione o seguinte código dentro <application> do elemento XML:

     <activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" android:launchMode="singleTop" android:noHistory="true">
       <intent-filter>
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
         <data android:scheme="{url_scheme_of_your_app}" android:host="easyauth.callback" />
       </intent-filter>
     </activity>
    
  6. Em Visual Studio ou Xamarin Studio, executar o projeto cliente em um dispositivo ou emulador e iniciar súm em com o seu fornecedor de identidade escolhido. Quando tiver iniciado sessão com sucesso, a aplicação apresentará o seu ID de login e a lista de todos os itens, podendo então então fazer atualizações para os dados.

Resolução de problemas

A aplicação despenhou-se com Java.Lang.NoSuchMethodError: No static method startActivity

Em alguns casos, os conflitos nos pacotes de suporte apresentados como apenas um aviso no estúdio Visual, mas a aplicação falha com esta exceção em tempo de execução. Neste caso, tem de se certificar de que todos os pacotes de suporte referenciados no seu projeto têm a mesma versão. O pacote NuGet de Aplicações Móveis do Azure tem dependência Xamarin.Android.Support.CustomTabs para a plataforma Android. Portanto, se o seu projeto utilizar os pacotes de suporte mais recentes, precisará de instalar diretamente este pacote com a versão necessária para evitar conflitos.