Como armazenar em cache o token de autenticação

Este artigo demonstra como armazenar em cache o token de autenticação para melhorar o desempenho do seu aplicativo.

Usando ASP.NET

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

Crie uma propriedade confidencial do aplicativo cliente.

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 obtidos quando criou o recurso Leitor Imersivo.

Importante

O pacote NuGet Microsoft.IdentityModel.Clients.ActiveDirectory e a Biblioteca de Autenticação do Azure AD (ADAL) foram preteridos. Nenhum novo recurso foi adicionado desde 30 de junho de 2020. Recomendamos vivamente que atualize. Para saber mais, consulte o 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 AuthenticationResult objeto tem uma AccessToken propriedade, que é o token real que você usa ao iniciar o Immersive Reader usando o SDK. Ele também tem uma ExpiresOn propriedade que indica quando o token expira. Antes de iniciar o Immersive Reader, você pode 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 quando criou o recurso Leitor Imersivo.

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 expires_on propriedade é a data e hora em que o token expira, expresso como o número de segundos desde 1 de janeiro de 1970 UTC. Use esse valor para determinar se seu 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óximo passo