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.

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 Strumento di lettura immersiva.

Importante

Il pacchetto NuGet Microsoft.IdentityModel.Clients.ActiveDirectory e Autenticazione di Azure AD Library (ADAL) sono stati deprecati. Dal 30 giugno 2020 non sono state aggiunte nuove funzionalità. È consigliabile eseguire l'aggiornamento. Per altri dettagli, 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 ha una AccessToken proprietà che è il token effettivo che verrà usato quando si avvia il Strumento di lettura immersiva usando l'SDK. Ha anche una ExpiresOn proprietà che indica quando il token scadrà. Prima di avviare il Strumento di lettura immersiva, è possibile verificare se il token è scaduto e acquisire un nuovo token solo se è scaduto.

Uso di Node.JS

Aggiungere il pacchetto npm della richiesta al progetto. Usare il codice seguente per acquisire un token usando i valori di autenticazione ottenuti durante la creazione della risorsa 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 expires_on proprietà è la data e l'ora in cui il token scade, espresso come numero di secondi dal 1° gennaio 1970 UTC. Usare questo valore per determinare se il token è scaduto prima di tentare di acquisirne uno nuovo.

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

Passaggi successivi