Condividi tramite


Come memorizzare nella cache il token di autenticazione

Questo articolo illustra come memorizzare nella cache il token di autenticazione per migliorare le prestazioni dell'applicazione.

Uso di ASP.NET

Importare il pacchetto NuGet Microsoft.Identity.Client, usato per acquisire un token. Per dettagli, vedere Installare il pacchetto NuGet di Identity Client.

Creare una proprietà dell'applicazione client riservata.

private IConfidentialClientApplication _confidentialClientApplication;
private IConfidentialClientApplication ConfidentialClientApplication
{
    get {
        if (_confidentialClientApplication == null) {
            _confidentialClientApplication = ConfidentialClientApplicationBuilder.Create(ClientId)
            .WithClientSecret(ClientSecret)
            .WithAuthority($"https://login.windows.net/{TenantId}")
            .Build();
        }

        return _confidentialClientApplication;
    }
}

Usare quindi il codice seguente per acquisire un oggetto AuthenticationResult, usando i valori di autenticazione ottenuti durante la creazione della risorsa dello Strumento di lettura immersiva.

Importante

Il pacchetto NuGet Microsoft.IdentityModel.Clients.ActiveDirectory e Azure Active Directory Authentication Library (ADAL) sono stati deprecati. Dal 30 giugno 2020 non sono state aggiunte nuove funzionalità. È consigliabile eseguire l'aggiornamento. Per altre informazioni, vedere la guida alla migrazione.

public async Task<string> GetTokenAsync()
{
    const string resource = "https://cognitiveservices.azure.com/";

    var authResult = await ConfidentialClientApplication.AcquireTokenForClient(
        new[] { $"{resource}/.default" })
        .ExecuteAsync()
        .ConfigureAwait(false);

    return authResult.AccessToken;
}

L'oggetto AuthenticationResult include una proprietà AccessToken, che corrisponde al token effettivo usato quando si avvia lo Strumento di lettura immersiva con l'SDK. Contiene anche una proprietà ExpiresOn che indica la scadenza del token. Prima di avviare lo Strumento di lettura immersiva, è possibile verificare se il token è scaduto e, solo in quel caso, acquisire un nuovo token.

Uso di Node.js

Aggiungere al progetto il pacchetto npm request. Usare il codice seguente per acquisire un token, usando i valori di autenticazione ottenuti durante la creazione della risorsa dello Strumento di lettura immersiva.

router.get('/token', function(req, res) {
    request.post(
        {
            headers: { 'content-type': 'application/x-www-form-urlencoded' },
            url: `https://login.windows.net/${TENANT_ID}/oauth2/token`,
            form: {
                grant_type: 'client_credentials',
                client_id: CLIENT_ID,
                client_secret: CLIENT_SECRET,
                resource: 'https://cognitiveservices.azure.com/'
            }
        },
        function(err, resp, json) {
            const result = JSON.parse(json);
            return res.send({
                access_token: result.access_token,
                expires_on: result.expires_on
            });
        }
    );
});

La proprietà expires_on indica la data e l'ora di scadenza del token, espresso come numero di secondi trascorsi dal primo gennaio 1970 UTC. Usare questo valore per determinare se il token è scaduto prima di provare ad acquisirne uno nuovo.

async function getToken() {
    if (Date.now() / 1000 > CREDENTIALS.expires_on) {
        CREDENTIALS = await refreshCredentials();
    }
    return CREDENTIALS.access_token;
}

Passaggio successivo