Share via


Como armazenar o token de autenticação em cache

Este artigo demonstra como armazenar em cache o token de autenticação a fim de aprimorar o desempenho do aplicativo.

Usando ASP.NET

Importe o pacote NuGet Microsoft.Identity.Client, que é usado para adquirir um token. Para obter detalhes, confira Instalar o pacote NuGet do Cliente de Identidade.

Crie uma propriedade de aplicativo 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;
    }
}

Em seguida, use o código a seguir para adquirir um AuthenticationResult, usando os valores de autenticação que você obteve ao criar o recurso da Leitura Avançada.

Importante

O pacote NuGet Microsoft.IdentityModel.Clients.ActiveDirectory e a ADAL (Biblioteca de Autenticação do Azure AD) foram preteridos. Não foi adicionado nenhum novo recurso desde 30 de junho de 2020. Recomendamos com ênfase que você faça upgrade. Veja mais detalhes no guia de migração.

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

O objeto AuthenticationResult tem a propriedade AccessToken, que é o token real que você usará ao iniciar a Leitura Avançada usando o SDK. Ele também tem uma propriedade ExpiresOn, que indica quando o token expirará. Antes de iniciar a Leitura Avançada, você poderá verificar se o token expirou e adquirir um novo token somente se ele tiver expirado.

Usando Node.js

Adicione o pacote npm request ao seu projeto. Use o código a seguir para adquirir um token, usando os valores de autenticação que você obteve ao criar o recurso da Leitura Avançada.

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

A propriedade expires_on é a data e a hora de expiração do token, expressas como o número de segundos desde 1º de janeiro de 1970 UTC. Use esse valor para determinar se o token expirou antes de tentar adquirir um novo.

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

Próxima etapa