Cómo almacenar en caché el token de autenticación

En este artículo se muestra cómo almacenar en caché el token de autenticación para mejorar el rendimiento de su aplicación.

Uso de ASP.NET

Importe el paquete NuGet Microsoft.Identity.Client, que se usa para adquirir un token.

Cree una propiedad de aplicación cliente confidencial.

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;
    }
}

A continuación, use el siguiente código para adquirir un AuthenticationResult, mediante los valores de autenticación obtenidos cuando creó el recurso del Lector inmersivo.

Importante

El paquete NuGet Microsoft.IdentityModel.Clients.ActiveDirectory y la biblioteca de Autenticación de Azure AD (ADAL) han quedado en desuso. No se han agregado nuevas características desde el 30 de junio de 2020. Es muy recomendable que actualice su versión, consulte la guía de migración para obtener más detalles.

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;
}

El objeto AuthenticationResult tiene una propiedad AccessToken que es el token real que usará al iniciar el Lector inmersivo mediante el SDK. También tiene una propiedad ExpiresOn que indica cuándo expirará el token. Antes de iniciar el Lector inmersivo, puede comprobar si ha expirado el token y adquirir un nuevo token solo si lo ha hecho.

Uso de Node.JS

Agregue el paquete de npm request al proyecto. Use el siguiente código para adquirir un token, mediante los valores de autenticación obtenidos cuando creó el recurso del Lector inmersivo.

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 propiedad expires_on es la fecha y hora en que expira el token, expresada como el número de segundos desde el 1 de enero de 1970 UTC. Use este valor para determinar si ha expirado su token antes de intentar adquirir uno nuevo.

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

Pasos siguientes