Condividi tramite


Implementazione di un provider di archiviazione MySQL personalizzato di ASP.NET Identity

di Raquel Soares De Almeida, Suhas Joshi, Tom FitzMacken

ASP.NET Identity è un sistema estendibile che consente di creare un provider di archiviazione personalizzato e collegarlo all'applicazione senza lavorare nuovamente l'applicazione. Questo argomento descrive come creare un provider di archiviazione MySQL per ASP.NET Identity. Per una panoramica della creazione di provider di archiviazione personalizzati, vedere Panoramica dei provider di archiviazione personalizzati per ASP.NET identità.

Per completare questa esercitazione, è necessario disporre di Visual Studio 2013 con l'aggiornamento 2.

Questa esercitazione:

  • Mostra come creare un'istanza del database MySQL in Azure.
  • Illustrare come usare uno strumento client MySQL (MySQL Workbench) per creare tabelle e gestire il database remoto in Azure.
  • Mostra come sostituire l'implementazione predefinita ASP.NET Identity Storage con l'implementazione personalizzata in un progetto di applicazione MVC.

Questa esercitazione è stata originariamente scritta da Raquel Soares De Almeida e Rick Anderson ( @RickAndMSFT ). Il progetto di esempio è stato aggiornato per Identity 2.0 da Suhas Joshi. L'argomento è stato aggiornato per Identity 2.0 di Tom FitzMacken.

Scaricare il progetto completato

Alla fine di questa esercitazione si avrà un progetto di applicazione MVC con identità ASP.NET che funziona con un database MySQL ospitato in Azure.

È possibile scaricare il provider di archiviazione MySQL completato in AspNet.Identity.MySQL (GitHub).

I passaggi che si eseguiranno

In questa esercitazione si apprenderà come:

  1. Creare un database MySQL in Azure
  2. Creare le tabelle identity di ASP.NET in MySQL
  3. Creare un'applicazione MVC e configurarla per usare il provider MySQL
  4. Eseguire l'app

Questo argomento non illustra l'architettura di ASP.NET Identity e le decisioni che è necessario prendere durante l'implementazione di un provider di archiviazione clienti. Per queste informazioni, vedere Panoramica dei provider di archiviazione personalizzati per ASP.NET identità.

Esaminare le classi del provider di archiviazione MySQL

Prima di passare alla procedura per creare il provider di archiviazione MySQL, esaminare le classi che costituiscono il provider di archiviazione. Sono necessarie classi che gestiscono le operazioni e le classi di database chiamate dall'applicazione per gestire utenti e ruoli.

Classi di archiviazione

  • IdentityUser : contiene proprietà per l'utente.
  • UserStore : contiene operazioni per l'aggiunta, l'aggiornamento o il recupero degli utenti.
  • IdentityRole : contiene le proprietà per i ruoli.
  • RoleStore : contiene operazioni per l'aggiunta, l'eliminazione, l'aggiornamento e il recupero dei ruoli.

Classi livello di accesso ai dati

Per questo esempio, le classi di livello di accesso ai dati contengono istruzioni SQL per l'uso delle tabelle; Tuttavia, nel codice potrebbe essere necessario usare il mapping relazionale a oggetti (ORM), ad esempio Entity Framework o NHibernate. In particolare, l'applicazione potrebbe riscontrare prestazioni scarse senza un ORM che include caricamento ritardato e memorizzazione nella cache degli oggetti.

  • MySQLDatabase : contiene la connessione e i metodi del database MySQL per l'esecuzione di operazioni di database. L'istanza di UserStore e RoleStore viene creata con un'istanza di questa classe.
  • RoleTable : contiene operazioni di database per la tabella che archivia i ruoli.
  • UserClaimsTable : contiene operazioni di database per la tabella che archivia le attestazioni utente.
  • UserLoginsTable : contiene operazioni di database per la tabella che archivia le informazioni di accesso utente.
  • UserRoleTable : contiene operazioni di database per la tabella che archivia gli utenti a cui vengono assegnati i ruoli.
  • UserTable : contiene operazioni di database per la tabella che archivia gli utenti.

Creare un'istanza del database MySQL in Azure

  1. Accedere al portale di Azure.
  2. Fare clic su +NEW nella parte inferiore della pagina e quindi selezionare STORE.
    Immagine che mostra come accedere all'archivio del portale di Azure
  3. Nella procedura guidata Scegli e componente aggiuntivo selezionare ClearDB MySQL Database e fare clic sulla freccia successiva in basso a destra della finestra di dialogo.
    Immagine che visualizza l'annuncio Clear D B My S Q L Database
  4. Mantenere il piano gratuito predefinito e modificare il nome in IdentityMySQLDatabase. Selezionare l'area più vicina e quindi fare clic sulla freccia successiva.
    Immagine del piano gratuito selezionato e del nome
  5. Fare clic sul segno di spunta per completare la creazione del database.
    Immagine della creazione di acquisti e database di revisione
  6. Dopo che è stato creato, il database può essere gestito nella scheda ADD-ONS del portale di gestione.
    Immagine della scheda componenti aggiuntivi
  7. È possibile ottenere le informazioni di connessione al database facendo clic su INFORMAZIONI DI CONNESSIONE nella parte inferiore della pagina.
    Immagine che mostra il percorso delle informazioni di connessione
  8. Copiare la stringa di connessione facendo clic sul pulsante copia e salvarla in modo da poterla usare più avanti nell'applicazione MVC.
    Immagine che mostra la stringa di connessione e U R L

Creare le tabelle identity di ASP.NET in un database MySQL

Installare lo strumento MySQL Workbench per connettersi e gestire il database MySQL

  1. Installare lo strumento MySQL Workbench dalla pagina download di MySQL
  2. Avviare l'app e aggiungere clic sul pulsante MySQLConnections + per aggiungere una nuova connessione. Usare i dati della stringa di connessione copiati dal database di Azure MySQL creato in precedenza in questa esercitazione.
  3. Dopo aver stabilito la connessione, aprire una nuova scheda Query ; incollare i comandi da MySQLIdentity.sql nella query ed eseguirlo per creare le tabelle di database.
  4. Sono ora disponibili tutte le tabelle necessarie ASP.NET Identity create in un database MySQL ospitato in Azure, come illustrato di seguito.
    Immagine che mostra le tabelle necessarie per l'identità

Creare un progetto di applicazione MVC dal modello e configurarlo per l'uso del provider MySQL

Se necessario, installare Visual Studio Express 2013 per Web o Visual Studio 2013 con l'aggiornamento 2.

Scaricare il ASP.NET. Progetto Identity.MySQL da GitHub

  1. Passare all'URL del repository in AspNet.Identity.MySQL (GitHub).
  2. Scaricare il codice sorgente.
  3. Estrarre il file .zip in una cartella locale.
  4. Aprire la soluzione AspNet.Identity.MySQL e compilarla.

Creare un nuovo progetto di applicazione MVC dal modello

  1. Fare clic con il pulsante destro del mouse sulla soluzione AspNet.Identity.MySQL e su Aggiunginuovo progetto

  2. Nella finestra di dialogo Aggiungi nuovo progetto selezionare Visual C# a sinistra, quindi Web e quindi selezionare ASP.NET applicazione Web. Assegnare un nome al progetto IdentityMySQLDemo; quindi fare clic su OK.

    Immagine della finestra di dialogo Aggiungi nuovo progetto

  3. Nella finestra di dialogo Nuovo ASP.NET Progetto selezionare il modello MVC con le opzioni predefinite (che includono singoli account utente come metodo di autenticazione) e fare clic su OK. Immagine della nuova finestra di dialogo progetto A P dot N E T

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto IdentityMySQLDemo e scegliere Gestisci pacchetti NuGet. Nella finestra di dialogo di testo di ricerca digitare Identity.EntityFramework. Selezionare questo pacchetto nell'elenco dei risultati e fare clic su Disinstalla. Verrà richiesto di disinstallare il pacchetto di dipendenza EntityFramework. Fare clic su Sì perché non sarà più questo pacchetto in questa applicazione.

  5. Fare clic con il pulsante destro del mouse sul progetto IdentityMySQLDemo, selezionare Aggiungi, Riferimento, Soluzione, Progetti; selezionare il progetto AspNet.Identity.MySQL e fare clic su OK.

  6. Nel progetto IdentityMySQLDemo sostituire tutti i riferimenti a
    using Microsoft.AspNet.Identity.EntityFramework;
    con
    using AspNet.Identity.MySQL;

  7. In IdentityModels.cs impostare ApplicationDbContext per derivare da MySqlDatabase e includere un costruttore che accetta un singolo parametro con il nome della connessione.

    public class ApplicationDbContext : MySQLDatabase
    {
        public ApplicationDbContext(string connectionName)
            : base(connectionName)
        {
        }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext("DefaultConnection");
        }
    }
    
  8. Aprire il file IdentityConfig.cs. Nel metodo ApplicationUserManager.Create sostituire l'istanza di UserManager con il codice seguente:

    var manager = new ApplicationUserManager(
        new UserStore<ApplicationUser>(
        context.Get<ApplicationDbContext>() as MySQLDatabase));
    
  9. Aprire il file web.config e sostituire la stringa DefaultConnection con questa voce sostituendo i valori evidenziati con la stringa di connessione del database MySQL creato nei passaggi precedenti:

    <add name="DefaultConnection" connectionString="Database=IdentityMySQLDatabase;
    Data Source=<DataSource>;User Id=<UserID>;Password=<Password>"
    providerName="MySql.Data.MySqlClient" />
    

Eseguire l'app e connettersi al database MySQL

  1. Fare clic con il pulsante destro del mouse sul progetto IdentityMySQLDemo e scegliere Imposta come progetto di avvio

  2. Premere CTRL + F5 per compilare ed eseguire l'app.

  3. Fare clic sulla scheda Registra nella parte superiore della pagina.

  4. Immettere un nuovo nome utente e una nuova password e quindi fare clic su Registra.

    Immagine che mostra il nuovo nome utente e la password

  5. Il nuovo utente è ora registrato e connesso.

    Figura che mostra il nuovo utente è registrato e connesso

  6. Indietro allo strumento MySQL Workbench e esaminare il contenuto della tabella IdentityMySQLDatabase. Esaminare la tabella utenti per le voci durante la registrazione di nuovi utenti.

    Immagine dello strumento di ispezione di My S Q L Workbench

Passaggi successivi

Per altre informazioni su come abilitare altri metodi di autenticazione in questa app, vedere Creare un'app ASP.NET MVC 5 con Facebook e Google OAuth2 e OpenID Sign-On.

Per informazioni su come integrare il database con OAuth e configurare i ruoli per limitare l'accesso agli utenti all'app, vedere Distribuire un'app MVC 5 sicura con appartenenza, OAuth e ASP.NET database SQL ad Azure.