Creare un servizio di accesso utente attendibile usando Funzioni di Azure

Questo articolo descrive come usare Funzioni di Azure per creare un servizio di accesso utente attendibile.

Importante

L'endpoint creato alla fine di questa esercitazione non è sicuro. Assicurarsi di leggere i dettagli sulla sicurezza nell'articolo Sicurezza funzioni di Azure . È necessario aggiungere la sicurezza all'endpoint per garantire che gli attori non possano effettuare il provisioning dei token.

Scaricare codice

Trovare il codice finalizzato per questa guida introduttiva in GitHub

Prerequisiti

Panoramica

Diagramma dell'architettura del servizio attendibile

Per questa esercitazione verrà creata una funzione di Azure che fungerà da servizio di provisioning per il token attendibile. È possibile usare questa esercitazione per il bootstrap del servizio di provisioning dei token.

Questo servizio è responsabile dell'autenticazione degli utenti a Servizi di comunicazione di Azure. Gli utenti delle applicazioni di Servizi di comunicazione richiedono un oggetto Access Token per partecipare ai thread di chat e alle chiamate VoIP. La funzione di Azure agisce come un intermediario attendibile tra l'utente e Servizi di comunicazione. In questo modo, è possibile effettuare il provisioning dei token di accesso senza esporre la stringa di connessione della risorsa agli utenti.

Per altre informazioni, vedere la documentazione concettuale relativa all'architettura client-server e alle funzionalità di autenticazione e autorizzazione.

Configurazione

Configurazione di Funzioni di Azure

È innanzitutto necessario configurare la struttura di base per la funzione di Azure. Le istruzioni dettagliate sulla configurazione sono disponibili qui: Creare una funzione con Visual Studio Code

Per la funzione di Azure sono necessarie le configurazioni seguenti:

  • Language: JavaScript
  • Template: Trigger HTTP
  • Livello di autorizzazione: anonimo (se si preferisce un modello di autorizzazione diverso, questo passaggio può essere eseguito in un secondo momento)
  • Nome funzione: definito dall'utente

Dopo aver seguito le istruzioni di Funzioni di Azure con la configurazione precedente, è necessario disporre di un progetto in Visual Studio Code per la funzione di Azure con un file index.js contenente la funzione stessa. Il codice all'interno di questo file deve essere il seguente:


module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    const name = (req.query.name || (req.body && req.body.name));
    const responseMessage = name
        ? "Hello, " + name + ". This HTTP triggered function executed successfully."
        : "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.";

    context.res = {
        // status: 200, /* Defaults to 200 */
        body: responseMessage
    };
}

Si procederà con l'installazione delle librerie di Servizi di comunicazione di Azure.

Installare le librerie di Servizi di comunicazione

Per generare User Access Tokens, verrà usata la libreria Identity.

Usare il npm install comando per installare identity SDK Servizi di comunicazione di Azure per JavaScript.


npm install @azure/communication-identity --save

L'opzione --save elenca la libreria come dipendenza nel file package.json.

Nella parte superiore del file index.js importare l'interfaccia per CommunicationIdentityClient

const { CommunicationIdentityClient } = require('@azure/communication-identity');

Generazione del token di accesso

Per consentire alla funzione di Azure di generare User Access Tokens, è innanzitutto necessario usare la stringa di connessione per la risorsa di Servizi di comunicazione.

Per altre informazioni sul recupero della stringa di connessione, vedere la guida di avvio rapido al provisioning delle risorse.

const connectionString = 'INSERT YOUR RESOURCE CONNECTION STRING'

Successivamente, la funzione originale verrà modificata per generare User Access Tokens.

User Access Tokens vengono generati creando un utente dal metodo createUser. Una volta creato l'utente, è possibile usare il metodo getToken per generare un token per l'utente restituito dalla funzione di Azure.

Per questo esempio, verrà configurato l'ambito del token per voip. Per l'applicazione possono essere necessari altri ambiti. Altre informazioni sugli ambiti.

module.exports = async function (context, req) {
    let tokenClient = new CommunicationIdentityClient(connectionString);

    const user = await tokenClient.createUser();

    const userToken = await tokenClient.getToken(user, ["voip"]);

    context.res = {
        body: userToken
    };
}

Per CommunicationUser di Servizi di comunicazione, è possibile ignorare il passaggio relativo alla creazione e generare semplicemente un token di accesso. Per altre informazioni, vedere Avvio rapido: Creare e gestire i token di accesso utente.

Testare la funzione di Azure

Eseguire la funzione di Azure in locale premendo F5. Questa operazione consente di inizializzare la funzione di Azure in locale e la rende accessibile tramite: http://localhost:7071/api/FUNCTION_NAME. Vedere la documentazione aggiuntiva sull'esecuzione in locale

Aprire l'URL nel browser per visualizzare il corpo della risposta con l'ID utente di comunicazione, il token e la scadenza del token.

Screenshot che illustra un esempio di risposta per la funzione di Azure creata.

Distribuire la funzione in Azure

Per distribuire la funzione di Azure, è possibile seguire le istruzioni dettagliate.

In riepilogo, sarà necessario:

  1. Accedere ad Azure da Visual Studio.
  2. Pubblicare il progetto nell'account Azure. Scegliere una sottoscrizione esistente.
  3. Creare una nuova risorsa della funzione di Azure usando la procedura guidata di Visual Studio o usare una risorsa esistente. Per una nuova risorsa, sarà necessario configurarla per l'area, il runtime e l'identificatore univoco desiderati.
  4. Attendere il completamento della distribuzione.
  5. Eseguire la funzione. 🎉

Eseguire la funzione di Azure

Eseguire la funzione di Azure tramite l'URL http://<function-appn-ame>.azurewebsites.net/api/<function-name>

È possibile trovare l'URL facendo clic con il pulsante destro del mouse sulla funzione in Visual Studio Code e copiando l'URL della funzione.

Altre informazioni sull'esecuzione della funzione di Azure

Protezione della funzione di Azure

Nell'ambito della configurazione di un servizio attendibile per effettuare il provisioning dei token di accesso per gli utenti, è necessario tenere conto della sicurezza di tale endpoint per assicurarsi che nessun attore non valido possa creare in modo casuale i token per il servizio. Funzioni di Azure fornire funzionalità di sicurezza predefinite che è possibile usare per proteggere l'endpoint usando diversi tipi di criteri di autenticazione. Altre informazioni sulla sicurezza delle funzioni di Azure

Pulire le risorse

Per pulire e rimuovere una sottoscrizione di Servizi di comunicazione, è possibile eliminare la risorsa o il gruppo di risorse. Eliminando il gruppo di risorse vengono eliminate anche tutte le altre risorse associate. È possibile trovare altre informazioni sulla pulizia delle risorse di Servizi di comunicazione di Azure e sulla pulizia delle risorse di Funzioni di Azure.

Passaggi successivi

Può essere utile vedere anche gli articoli seguenti: