Condividi tramite


Aggiungere l'autenticazione all'app Xamarin.Android

Informazioni generali

Questo argomento illustra come autenticare gli utenti di un'app per dispositivi mobili dall'applicazione client. In questa esercitazione si aggiunge l'autenticazione al progetto di avvio rapido usando un provider di identità supportato da App per dispositivi mobili di Azure. Dopo l'autenticazione e l'autorizzazione nell'app per dispositivi mobili, viene visualizzato il valore id utente.

Questa esercitazione si basa sulla guida introduttiva all'app per dispositivi mobili. È anche necessario completare l'esercitazione Creare un'app Xamarin.Android. Se non si usa il progetto server di avvio rapido scaricato, è necessario aggiungere il pacchetto di estensione di autenticazione al progetto. Per altre informazioni sui pacchetti di estensione server, vedere Usare l'SDK del server back-end .NET per App per dispositivi mobili di Azure.

Registrare l'app per l'autenticazione e configurare i servizi app

Prima di tutto, è necessario registrare l'app nel sito di un provider di identità e quindi impostare le credenziali generate dal provider nel back-end delle app per dispositivi mobili.

  1. Configurare il provider di identità preferito seguendo le istruzioni specifiche del provider:

  2. Ripetere i passaggi precedenti per ogni provider che si vuole supportare nell'app.

Aggiungere l'app agli URL di reindirizzamento esterni consentiti

Per l'autenticazione sicura è necessario definire un nuovo schema URL per l'app. Ciò consente al sistema di autenticazione di tornare all'app al termine del processo di autenticazione. In questa esercitazione viene usato lo schema URL nomeapp in tutto. Tuttavia, è possibile usare qualsiasi schema url scelto. Deve essere univoco per l'applicazione per dispositivi mobili. Per abilitare il reindirizzamento sul lato server:

  1. Nel [portale di Azure], selezionare il servizio app.

  2. Fare clic sull'opzione di menu Autenticazione/autorizzazione.

  3. Nella URL di reindirizzamento esterno consentita, inserire url_scheme_of_your_app://easyauth.callback. Il url_scheme_of_your_app presente in questa stringa è lo schema URL per la tua applicazione mobile. Deve seguire la normale specifica url per un protocollo (usare solo lettere e numeri e iniziare con una lettera). È consigliabile prendere nota della stringa scelta perché sarà necessario modificare il codice dell'applicazione per dispositivi mobili con lo schema URL in diverse posizioni.

  4. Fare clic su OK.

  5. Fare clic su Salva.

Limitare le autorizzazioni agli utenti autenticati

Per impostazione predefinita, le API in un back-end delle app per dispositivi mobili possono essere richiamate in modo anonimo. Successivamente, è necessario limitare l'accesso solo ai client autenticati.

  • Node.js back-end (tramite il portale di Azure) :

    Nelle impostazioni delle app per dispositivi mobili fare clic su Tabelle semplici e selezionare la tabella. Fare clic su Modifica autorizzazioni, selezionare Solo accesso autenticato per tutte le autorizzazioni e quindi fare clic su Salva.

  • back end .NET (C#):

    Nel progetto server, navigare verso Controllers>TodoItemController.cs. Aggiungere l'attributo [Authorize] alla classe TodoItemController come indicato di seguito. Per limitare l'accesso solo a metodi specifici, è anche possibile applicare questo attributo solo a tali metodi anziché alla classe . Ripubblica il progetto del server.

      [Authorize]
      public class TodoItemController : TableController<TodoItem>
    
  • Node.js back-end (tramite codice Node.js) :

    Per richiedere l'autenticazione per l'accesso alle tabelle, aggiungere la riga seguente allo script del server Node.js:

      table.access = 'authenticated';
    

    Per altre informazioni, vedere Procedura: Richiedere l'autenticazione per l'accesso alle tabelle. Per informazioni su come scaricare il progetto di codice di avvio rapido dal sito, vedere Procedura: Scaricare il progetto di codice di avvio rapido back-end Node.js usando Git.

In Visual Studio o Xamarin Studio eseguire il progetto client in un dispositivo o un emulatore. Verificare che venga generata un'eccezione non gestita con un codice di stato 401 (Non autorizzato) dopo l'avvio dell'app. Ciò si verifica perché l'app tenta di accedere al back-end dell'app per dispositivi mobili come utente non autenticato. La tabella TodoItem richiede ora l'autenticazione.

Si aggiornerà quindi l'app client per richiedere risorse dal back-end dell'app per dispositivi mobili con un utente autenticato.

Aggiungere l'autenticazione all'app

L'app viene aggiornata per richiedere agli utenti di toccare il pulsante Accedi ed eseguire l'autenticazione prima che vengano visualizzati i dati.

  1. Aggiungere il codice seguente alla 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();
     }
    

    Verrà creato un nuovo metodo per autenticare un utente e un gestore di metodi per un nuovo pulsante Accedi. L'utente nel codice di esempio precedente viene autenticato usando un account di accesso di Facebook. Una finestra di dialogo viene usata per visualizzare l'ID utente dopo l'autenticazione.

    Nota

    Se si usa un provider di identità diverso da Facebook, modificare il valore passato a LoginAsync precedente a uno dei seguenti: MicrosoftAccount, Twitter, Googleo WindowsAzureActiveDirectory.

  2. Nel metodo OnCreate, eliminare o commentare la seguente riga di codice:

     OnRefreshItemsSelected ();
    
  3. Nel file Activity_To_Do.axml, aggiungi la seguente definizione del pulsante LoginUser prima del pulsante AddItem esistente:

       <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. Aggiungere l'elemento seguente al file di risorse Strings.xml:

     <string name="login_button_text">Sign in</string>
    
  5. Aprire il file AndroidManifest.xml, aggiungere il codice seguente all'interno <application> 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. In Visual Studio o Xamarin Studio eseguire il progetto client in un dispositivo o un emulatore e accedere con il provider di identità scelto. Dopo aver eseguito l'accesso, l'app visualizzerà l'ID di accesso e l'elenco di elementi todo ed è possibile apportare aggiornamenti ai dati.

Risoluzione dei problemi

L'applicazione si è arrestata in modo anomalo con Java.Lang.NoSuchMethodError: No static method startActivity

In alcuni casi, i conflitti nei pacchetti di supporto sono visualizzati solo come avviso in Visual Studio, tuttavia, l'applicazione si arresta in modo anomalo con questa eccezione durante l'esecuzione. In questo caso è necessario assicurarsi che tutti i pacchetti di supporto a cui si fa riferimento nel progetto abbiano la stessa versione. Il pacchetto NuGet di App per dispositivi mobili di Azure ha Xamarin.Android.Support.CustomTabs dipendenza per la piattaforma Android, quindi se il progetto usa pacchetti di supporto più recenti è necessario installare questo pacchetto con la versione necessaria direttamente per evitare conflitti.