Linguaggio: HTML | XAML

Requisiti per l'accesso all'account Microsoft (XAML)

Applies to Windows and Windows Phone

Con le app di Windows Store in C++, C# o Visual Basic, è possibile consentire agli utenti di effettuare l'accesso e la disconnessione con i propri account Microsoft, in modo che l'app possa accedere ai relativi dati in servizi cloud Microsoft come Outlook.com e Microsoft OneDrive.

Applica queste linee guida quando progetti l'esperienza di accesso e disconnessione della tua app, in modo da offrire un'esperienza utente coerente con quella di altre app di Windows Store. Queste linee guida ti consentono inoltre di proteggere i dati degli utenti nell'app.

Panoramica

Per l'accesso ai dati degli utenti da servizi cloud Microsoft come Outlook.com e OneDrive, è necessario che gli utenti effettuino l'accesso con il proprio account Microsoft e forniscano il consenso per l'accesso dell'app ai dati richiesti. Per proteggere i dati degli utenti da altri utenti del computer, l'app di Windows Store deve inoltre fornire un meccanismo di disconnessione dall'app. In questo argomento viene descritto come fare.

Importante  Se l'app non consente agli utenti di disconnettersi, potrà accedere ai loro dati ogni volta che aprono l'app dall'account utente con cui hanno effettuato il primo accesso. Anche se questa funzionalità risulta utile per gli utenti che non condividono mai il computer o non lo smarriscono, presenta una potenziale vulnerabilità della sicurezza se il computer viene usato da altri utenti o viene rubato. Per questi motivi, l'app di Windows Store deve sempre indicare quando viene effettuato l'accesso a un account utente e fornire l'opzione per la disconnessione.

In questi passaggi viene fornita una descrizione generale sui modi in cui l'app può accedere alle informazioni del profilo dell'utente. Per le istruzioni dettagliate, inizia da qui.

  1. Aggiungi i comandi per le impostazioni necessarie all'app

    Se l'app è un'app di Windows Store che usa servizi cloud Microsoft come Outlook.com e OneDrive, è necessario includere queste due voci nel relativo riquadro Impostazioni.

    • Account

      Il comando Account del riquadro Impostazioni visualizza il riquadro a comparsa in cui gli utenti possono effettuare l'accesso e la disconnessione dal loro account Microsoft.

    • Informativa sulla privacy

      Il comando Informativa sulla privacy del riquadro Impostazioni visualizza il riquadro a comparsa contenente l'informativa sulla privacy dell'app. Poiché l'app verrà usata per accedere ai dati personali degli utenti, deve includere un'informativa sulla privacy.

  2. Fornisci un'informativa sulla privacy

    Importante  Se l'app di Windows Store accede ai dati personali degli utenti, quando invii l'app a Windows Store, devi fornire un'informativa sulla privacy che deve essere inoltre disponibile anche all'interno dell'app. Per altre informazioni su questo e altri requisiti delle app di Windows Store, vedi Requisiti di certificazione delle app per Windows Store.

  3. Consenti l'accesso dell'utente

    L'app può consentire l'accesso dell'utente automaticamente all'avvio oppure solo quando è necessario accedere ai dati archiviati in servizi cloud Microsoft come Outlook.com e OneDrive. La procedura per ogni metodo viene descritta più avanti in Accesso degli utenti.

  4. Consenti la disconnessione dell'utente

    Valuta come verrà usata l'app. Se accede ai dati che l'utente potrebbe ritenere riservati, devi prevedere la disconnessione automatica dell'utente per evitare accessi non autorizzati. Se invece l'app viene usata in un ambiente più sicuro, puoi consentire all'utente di disconnettersi manualmente mediante il comando Account delle impostazioni. La procedura per ogni metodo viene descritta più avanti in Disconnessione degli utenti.

    Importante  

    Gli utenti devono essere sempre informati se l'app è connessa o meno al loro account Microsoft.

  5. Visualizza lo stato di accesso nell'interfaccia utente dell'app

    Aggiungi un tipo di indicazione nell'interfaccia utente dell'app per mostrare agli utenti se hanno effettuato l'accesso e se l'app può accedere ai loro dati.

    Nota  È importante che l'app informi gli utenti quando hanno effettuato l'eccesso. Questo risultato si può ottenere semplicemente visualizzando il nome dell'utente oppure elencando elementi provenienti dai dati archiviati nel servizio cloud Microsoft. Se ad esempio l'app visualizza le foto dell'utente archiviate in OneDrive, potrebbe mostrare un elenco di foto quando l'utente ha effettuato l'accesso e un messaggio quando è necessario che lo effettui.

Aggiungi le impostazioni necessarie

In questa sezione viene descritto come aggiungere i comandi delle impostazioni necessarie nel riquadro Impostazioni.

  1. Crea il riquadro a comparsa Privacy.

    1. In Microsoft Visual Studio, in Esplora soluzioni, fai clic con il pulsante destro del mouse sull'app e scegli il comando Aggiungi > Nuovo elemento per aggiungere un nuovo controllo SettingsFlyout.
    2. Nel browser Aggiungi nuovo elemento seleziona Installato > Visual C# > Windows Store per aprire l'elenco degli elementi disponibili.
    3. Seleziona la voce relativa al riquadro a comparsa Impostazioni nell'elenco, immetti Privacy.xaml nel campo Nome e fai clic su Aggiungi.
    4. Apri Privacy.xaml, sostituisci l'elemento TextbBlock.Text con questo e modifica gli elementi specificati in base alla tua app.
      
      <!-- Replace the app class name in x:Class and xmlns:local    -->
      <!--   with the class name of your app                        -->
      
      <SettingsFlyout
          x:Class="App.Privacy"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="using:App"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          mc:Ignorable="d"
          IconSource="Assets/SmallLogo.png"
          Title="Privacy"
          d:DesignWidth="346">
      
          <!-- This StackPanel acts as a root panel for vertical layout of the content sections -->
          <StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
      
              <!-- The StackPanel(s) below define individual content sections -->
      
              <!-- Content Section 1-->
              <StackPanel Style="{StaticResource SettingsFlyoutSectionStyle}">
                  <!-- Section 1 header -->
                  <TextBlock Style="{StaticResource TitleTextBlockStyle}" Text="Privacy statement" />
                  <!-- Section 1 body -->
                  <TextBlock Style="{StaticResource BodyTextBlockStyle}" Margin="0,0,0,25" TextWrapping="Wrap">
                      <TextBlock.Text>
                          Your privacy statement here.
                      </TextBlock.Text>
                  </TextBlock>
      
              </StackPanel>
              <!-- Define more Content Sections below as necessary -->
          </StackPanel>
      </SettingsFlyout>
      
      
      
    5. Aggiungi il riferimento all'assembly e il riquadro a comparsa Privacy al riquadro Impostazioni nel file App.xaml.cs dell'app, in modo da consentirne la visualizzazione all'utente.
      
      // add the assembly for the Settings flyout
      using Windows.UI.ApplicationSettings;
      using System.Threading.Tasks;
      
      
      
      
      protected override void onWindowCreated(WindowCreatedEventArgs args)
      {
          SettingsPane.GetForCurrentView().CommandsRequested += onCommandsRequested;
      }
      
      void onCommandsRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs e)
      {
          SettingsCommand privacyCommand = new SettingsCommand("privacy", "Privacy", (handler) =>
          {
              Privacy privacyFlyout = new Privacy();
              privacyFlyout.Show();
          });
          e.Request.ApplicationCommands.Add(privacyCommand);
      }
      
      

    Nota  Puoi compilare la tua app per verificare che fino a questo punto sia tutto a posto.

  2. Crea il riquadro a comparsa Account con un pulsante di accesso.

    Il codice di questo passaggio definisce il layout per il riquadro a comparsa Account illustrato in questa cattura di schermata.

    Cattura di schermata del riquadro a comparsa Account creato in questo passaggio.
    1. In Esplora soluzioni fai clic con il pulsante destro del mouse sull'app e scegli il comando Aggiungi > Nuovo elemento per aggiungere un nuovo riquadro a comparsa Impostazioni.
    2. Nel browser Aggiungi nuovo elemento seleziona Installato > Visual C# > Windows Store per aprire l'elenco degli elementi disponibili.
    3. Seleziona il controllo riquadro a comparsa Impostazioni nell'elenco, immetti Account.xaml nel campo Nome e fai clic su Aggiungi.
    4. Apri Account.xaml, sostituisci l'elemento SettingsFlyout con questo e modifica gli elementi specificati in base alla tua app.
      
      <!-- Replace the app class name in x:Class and xmlns:local    -->
      <!--   with the class name of your app                        -->
      <SettingsFlyout
          x:Class="App.Account"
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          xmlns:local="using:App"
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
          mc:Ignorable="d"
          IconSource="Assets/SmallLogo.png"
          Title="Account"
          d:DesignWidth="346">
      
              <!-- Content Section 1-->
          <StackPanel x:Name="accountName">
              <TextBlock Name="userName" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="Wrap" 
                  Margin="0,0,0,25" Text="You're not signed in."/>
              <!-- both buttons are defined to occupy the same place in the UI -->
              <!-- however only one is visible at a time, to prevent flicker or confusion -->
              <!-- they are defined as Collapsed so neither is visibly by default -->
              <Button x:Name="signInBtn" Click="SignInClick" Content="Sign in" Visibility="Collapsed"/>
              <Button x:Name="signOutBtn" Click="SignOutClick" Content="Sign out" Visibility="Collapsed"/>
          </StackPanel>
      </SettingsFlyout>
      
      
      
    5. Aggiungi il riferimento all'assembly e il riquadro a comparsa Account al riquadro Impostazioni nel file App.xaml.cs dell'app, in modo da consentirne la visualizzazione all'utente.

      Nota  Aggiungi questo codice al metodo onCommandsRequested in App.xaml.cs.

      
      
          SettingsCommand accountCommand = new SettingsCommand("account", "Account", (handler) =>
          {
              Account accountFlyout = new Account();
              accountFlyout.Show();
          });
          e.Request.ApplicationCommands.Add(accountCommand);
      }
      
      

    Nota  Non puoi ancora compilare l'app, perché devi prima aggiungere i gestori per i pulsanti Accedi e Disconnetti. Questa procedura viene descritta nei passaggi successivi.

  3. In questo passaggio viene illustrato come ottenere informazioni del profilo dell'utente in modo da poterle usare per compilare i campi di testo e visualizzare il pulsante corretto sul riquadro a comparsa Account.

    Aggiungi i riferimenti al Live SDK, quindi crea un metodo per ottenere il nome dell'utente dal profilo del suo account Microsoft e scriverlo in un oggetto TextBlock nell'interfaccia utente. Se necessario, il metodo consentirà all'utente di effettuare l'accesso.

    Definisci il metodo nel file di codice principale dell'app, ad esempio —App.xaml.cs. Ciò consente a tutte le pagine dell'app di chiamare il metodo per visualizzare il nome dell'utente (se ha effettuato l'accesso al suo account Microsoft) oppure di visualizzare il messaggio indicante che l'utente non ha effettuato l'accesso.

    In questo esempio l'utente accede con un wl_basic ambito, che corrisponde all'ambito minimo necessario per accedere alle informazioni del profilo dell'utente. Per proteggere i dati dell'utente da accessi non autorizzati, l'app deve richiedere l'ambito più restrittivo che consenta l'accesso ai dati desiderati.

    Importante  È importante che l'app ottenga lo stato di accesso dell'utente direttamente dal Live SDK e che non memorizzi il valore nella cache. In questo modo è possibile evitare che la visualizzazione dell'app dello stato di accesso dell'utente non sia sincronizzata con lo stato di accesso effettivo, che viene gestito dal Live SDK.

    
    using Microsoft.Live;
    
    
    
    
    public static async Task updateUserName (TextBlock userName, Boolean signIn)
    {
        try
        {
            // Open Live Connect SDK client.
            LiveAuthClient LCAuth = new LiveAuthClient();
            LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
            try
            {
                LiveLoginResult loginResult = null;
                if (signIn)
                {
                    // Sign in to the user's Microsoft account with the required scope.
                    //  
                    //  This call will display the Microsoft account sign-in screen if 
                    //   the user is not already signed in to their Microsoft account 
                    //   through Windows 8.
                    // 
                    //  This call will also display the consent dialog, if the user has 
                    //   has not already given consent to this app to access the data 
                    //   described by the scope.
                    // 
                    //  Change the parameter of LoginAsync to include the scopes 
                    //   required by your app.
                    loginResult = await LCAuth.LoginAsync(new string[] { "wl.basic" });
                }
                else
                {
                    // If we don't want the user to sign in, continue with the current 
                    //  sign-in state.
                    loginResult = LCLoginResult;
                }
                if (loginResult.Status == LiveConnectSessionStatus.Connected)
                {
                    // Create a client session to get the profile data.
                    LiveConnectClient connect = new LiveConnectClient(LCAuth.Session);
    
                    // Get the profile info of the user.
                    LiveOperationResult operationResult = await connect.GetAsync("me");
                    dynamic result = operationResult.Result;
                    if (result != null)
                    {
                        // Update the text of the object passed in to the method. 
                        userName.Text = string.Join(" ", "Hello", result.name, "!");
                    }
                    else
                    {
                        // Handle the case where the user name was not returned. 
                    }
                }
                else
                {
                    // The user hasn't signed in so display this text 
                    //  in place of his or her name.
                    userName.Text = "You're not signed in.";
                }
            }
            catch (LiveAuthException exception)
            {
                // Handle the exception. 
            }
        }
        catch (LiveAuthException exception)
        {
                // Handle the exception. 
        }
        catch (LiveConnectException exception)
        {
                // Handle the exception. 
        }
    }
    
    
    

    Suggerimento  Puoi chiamare questo metodo dal code-behind delle pagine visualizzate per mostrare all'utente se ha effettuato o meno l'accesso al suo account Microsoft.

  4. Aggiungi la logica di accesso e disconnessione al file code-behind Account.xaml.cs.

    1. Aggiungi i riferimenti al Live SDK, quindi crea un metodo per eseguire una query sullo stato di accesso dell'utente e aggiornare l'interfaccia utente del riquadro a comparsa Account di conseguenza.

      
      using Microsoft.Live;
      using System.Threading.Tasks;
      
      
      
      
      private async Task SetNameField(Boolean login) {
          // If login == false, just update the name field. 
          await App.updateUserName(this.userName, login);
      
          // Test to see if the user can sign out.
          Boolean userCanSignOut = true;
      
          LiveAuthClient LCAuth = new LiveAuthClient();
          LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
      
          if (LCLoginResult.Status == LiveConnectSessionStatus.Connected)
          {
              userCanSignOut = LCAuth.CanLogout;
          }
          
          if (this.userName.Text.Equals("You're not signed in."))
          {
              // Show sign-in button.
              signInBtn.Visibility = Windows.UI.Xaml.Visibility.Visible;
              signOutBtn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
          }
          else
          {
              // Show sign-out button if they can sign out.
              signOutBtn.Visibility = (userCanSignOut ? Windows.UI.Xaml.Visibility.Visible : Windows.UI.Xaml.Visibility.Collapsed);
              signInBtn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
          }
      }
      
      
      
    2. Aggiungi questa chiamata di metodo al costruttore Account() per inizializzare il riquadro a comparsa quando un utente lo apre dal riquadro Impostazioni.
      
      SetNameField(false);
       
      
      
    3. Aggiungi il codice per gestire l'evento che viene attivato quando viene toccato il pulsante Accedi.

      Questo metodo chiama SetNameField per consentire l'accesso dell'utente e aggiornare l'interfaccia utente del riquadro a comparsa Account.

      
      private async void SignInClick(object sender, RoutedEventArgs e)
      {
        // This call will sign the user in and update the Account flyout UI.
        await SetNameField(true);
      }
      
      
    4. Aggiungi il codice per consentire la disconnessione dell'utente quando viene toccato il pulsante Disconnetti.

      
      private async void SignOutClick(object sender, RoutedEventArgs e)
      {
          try
          {
              // Initialize access to the Live Connect SDK.
              LiveAuthClient LCAuth = new LiveAuthClient();
              LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
              // Sign the user out, if he or she is connected;
              //  if not connected, skip this and just update the UI
              if (LCLoginResult.Status == LiveConnectSessionStatus.Connected)
              {
                  LCAuth.Logout();
              }
      
              // At this point, the user should be disconnected and signed out, so
              //  update the UI.
              this.userName.Text = "You're not signed in.";
      
              // Show sign-in button.
              signInBtn.Visibility = Windows.UI.Xaml.Visibility.Visible;
              signOutBtn.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
          }
          catch (LiveConnectException x)
          {
              // Handle exception.
          }
      }
      
      
      
  5. Compila l'app e testa gli elementi SettingsFlyout appena aggiunti.

    I comandi Account e Privacy appena aggiunti al riquadro Impostazioni dovrebbero venire visualizzati, come illustrato nella cattura di schermata.

    Pulsante di accesso rapido Impostazioni con i comandi Account e Privacy aggiunti in questo passaggio.
  6. Se quando l'app viene eseguita l'utente non ha effettuato l'accesso al proprio account Microsoft, non appena tocca il comando Account nel riquadro Impostazioni verrà visualizzato un riquadro a comparsa simile al seguente.

    Cattura di schermata che illustra l'esperienza di accesso dell'utente.

    Se l'utente tocca il pulsante Accedi, verranno visualizzate le schermate seguenti.

    1. L'interfaccia utente di accesso all'account Microsoft.

      Cattura di schermata dell'interfaccia utente di accesso all'account Microsoft.

    2. L'interfaccia utente di consenso di Live Connect, se l'utente non ha già fornito il consenso all'app.

      Cattura di schermata dell'interfaccia utente di richiesta di consenso a Live Connect.

    3. Dopo aver effettuato l'accesso e dato il consenso, l'utente torna nell'app.
  7. Se l'utente ha già effettuato l'accesso a un account Microsoft ed è in grado di disconnettersi, verrà visualizzato un riquadro a comparsa simile al seguente.

    Cattura di schermata dell'esperienza di disconnessione di un utente che può disconnettersi.

  8. Se l'utente ha già effettuato l'accesso a un account Microsoft e non è in grado di disconnettersi, verrà visualizzato un riquadro a comparsa simile al seguente.

    Cattura di schermata dell'esperienza di disconnessione di un utente che non può disconnettersi.

  9. Dopo che l'utente ha effettuato l'accesso, aggiorna l'interfaccia utente dell'app per mostrarne il nome.

    Cattura di schermata dell'app con il nome utente visualizzato.

Nota  Negli esempi di codice di questo passaggio vengono definiti i riquadri a comparsa per il riquadro Impostazioni. Dovrai aggiungere il markup e il codice nelle pagine visualizzate dell'app per mostrare il nome dell'utente.

Accesso degli utenti

Sono disponibili due approcci per consentire agli utenti di effettuare l'accesso alla tua app di Windows Store. Scegli quello appropriato in base al momento in cui l'app richiede l'accesso dell'utente.

  • Se quando l'utente non ha effettuato l'accesso l'app funziona ma non è possibile abilitare specifici scenari o funzionalità, richiedi all'utente di accedere tramite un'interfaccia utente Account del riquadro Impostazioni descritto in precedenza.

    Per altre informazioni, vedi l'argomento relativo all'accesso degli utenti nella documentazione di Live Connect.

  • Se la tua app funziona o fornisce un'esperienza completa solo dopo l'accesso dell'utente, visualizza la finestra di dialogo di accesso all'account Microsoft immediatamente dopo l'avvio dell'app. Per visualizzare questa finestra di dialogo, chiama il metodo Microsoft.Live.LiveAuthClient.LoginAsync.

    Ecco un esempio.

    
    public LiveConnectSession Session
    {
         get
         {
             return _session;
         }
         set
         {
             _session = value;
         }
    }
    
    private async void InitAuth()
    {
        if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
        {
           authClient = new LiveAuthClient();
           LiveLoginResult authResult = 
               await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.basic", "wl.skydrive" });
           if (authResult.Status == LiveConnectSessionStatus.Connected)
           {
               this.Session = authResult.Session;
           }
        }
    }
    
    

    Per altre informazioni, vedi l'argomento relativo all'accesso degli utenti nella documentazione di Live Connect.

  • Se l'app non richiede che l'utente effettui prima l'accesso, ma prevede comandi specifici che si integrano con servizi cloud Microsoft quali Outlook.com e OneDrive, puoi visualizzare l'interfaccia utente di accesso a un account Microsoft quando viene specificato uno di questi comandi. Ad esempio, sulla barra di un'app per la modifica di foto potrebbe essere visualizzato un comando come Salva foto in OneDrive. Per supportare questo scenario, aggiungi il codice di questo esempio nel gestore dei comandi della barra dell'app in modo che il comando consenta all'utente di effettuare l'accesso al suo account Microsoft poco prima del codice per il salvataggio della foto. Il codice per il salvataggio della foto non è illustrato in questo esempio.

    Ecco un esempio di accesso dell'utente da un comando della barra dell'app.

    
    private void AppBarSaveButton_Click(object sender, RoutedEventArgs e)
    {
        InitAuth();
    }
    
    private async void InitAuth()
    {
        if (!Windows.ApplicationModel.DesignMode.DesignModeEnabled)
        {
            authClient = new LiveAuthClient();
            LiveLoginResult authResult = 
                await authClient.LoginAsync(new List<string>() { "wl.signin", "wl.basic", "wl.skydrive" });
            if (authResult.Status == LiveConnectSessionStatus.Connected)
            {
                // An app-level property for the session.
                App.Session = authResult.Session;
            }
        }
    }
    
    

    Con Single Sign On, gli utenti visualizzano l'interfaccia utente di accesso o quella di consenso solo se è necessario che effettuino l'accesso o diano il consenso. Se hanno già effettuato l'accesso al loro account Microsoft e hanno dato il consenso per l'accesso dell'app ai loro dati, non visualizzano nessuna interfaccia utente aggiuntiva.

    Importante  

    Assicurati che ciò sia chiaro per gli utenti che hanno effettuato l'accesso al loro account Microsoft.

    Per altre informazioni, vedi l'argomento relativo all'accesso degli utenti nella documentazione di Live Connect.

    Per personalizzare l'aspetto di un pulsante della barra dell'app, leggi le linee guida per l'implementazione e la personalizzazione di Live Connect e scarica il file zip contenente le icone approvate.

Disconnessione degli utenti

In Windows 8, se un'app può connettersi ad alcune risorse mediante l'account Microsoft dell'utente, deve fornire all'utente un meccanismo per disconnettersi.

Nota  Se l'utente accede a Windows 8 con un account Microsoft o un account locale o di dominio collegato a un account Microsoft, è inutile prevedere un pulsante di disconnessione personalizzato.

Per eseguire la disconnessione di un utente, chiama il metodo Microsoft.Live.LiveAuthClient.Logout().

Da evitare

Assicurati che l'app:

  • Non visualizzi testo, controlli o finestre di dialogo di accesso e disconnessione diverse da quelle descritte in questo documento. L'uso della finestra di dialogo di accesso di Microsoft rassicura gli utenti che l'app non è in grado di accedere direttamente alle loro credenziali dell'account Microsoft.
  • Non visualizzi controlli di accesso o disconnessione personalizzati in posizioni diverse dal riquadro Impostazioni o come parte del flusso di comandi attività dell'app.

 

 

Mostra:
© 2014 Microsoft