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. Para obtener más información, consulte Instalar el paquete NuGet de Identity Client.

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 Microsoft.IdentityModel.Clients.ActiveDirectory NuGet y la Biblioteca de autenticación (ADAL) de Azure AD han quedado obsoletos. No se han agregado nuevas características desde el 30 de junio de 2020. Le recomendamos encarecidamente que haga una actualización. Para obtener más información, consulte la guía de migración.

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 usa al iniciar Immersive Reader mediante el SDK. También tiene una propiedad ExpiresOn que indica cuándo expira el token. Antes de iniciar Immersive Reader, 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;
}

Paso siguiente