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 AuthenticationResultoggetto , usando i valori di autenticazione ottenuti quando è stata creata la risorsa Strumento di lettura immersiva.

Importante

Il pacchetto NuGet Microsoft.IdentityModel.Client.ActiveDirectory e Autenticazione di Azure AD Library (ADAL) sono stati deprecati. Nessuna nuova funzionalità è stata aggiunta dal 30 giugno 2020. È consigliabile aggiornare, vedere la guida alla migrazione per altri dettagli.

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 scade. 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 quando è stata creata la 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 acquisire uno nuovo.

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

Passaggi successivi