Кэширование маркера проверки подлинности

В этой статье показано, как кэшировать маркер проверки подлинности для повышения производительности приложения.

С помощью ASP.NET

Microsoft.Identity.Client Импортируйте пакет NuGet, который используется для получения маркера. Дополнительные сведения см. в разделе "Установка пакета NuGet клиента удостоверений".

Создайте свойство конфиденциального клиентского приложения.

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

Затем используйте следующий код, чтобы получить AuthenticationResult, используя значения проверки подлинности, которые были получены при создании ресурса иммерсивного средства чтения.

Внимание

Пакет NuGet Microsoft.IdentityModel.Clients.ActiveDirectory и библиотека проверки подлинности Active Directory (ADAL) объявлены нерекомендуемыми. С 30 июня 2020 г. в них не добавлено никаких новых функций. Мы настоятельно рекомендуем вам выполнить обновление. Дополнительные сведения см. в руководстве по миграции.

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

Объект AuthenticationResult имеет свойство, которое является фактическим маркеромAccessToken, используемым при запуске Иммерсивное средство чтения с помощью пакета SDK. Он также имеет ExpiresOn свойство, которое указывает, когда срок действия маркера истекает. Перед запуском Иммерсивное средство чтения можно проверка, истек ли срок действия маркера, и получить новый маркер только в том случае, если срок его действия истек.

С помощью Node.JS

Добавьте в проект пакет npm request. Используйте следующий код, чтобы получить маркер, используя значения проверки подлинности, которые были получены при создании ресурса иммерсивного средства чтения.

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

Свойство expires_on — это дата и время окончания срока действия маркера, выраженные в виде количества секунд, прошедших с 1 января 1970 г. (в формате UTC). Используйте это значение, чтобы определить, истек ли срок действия маркера перед попыткой получения нового.

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

Следующий шаг