Ошибка исключения при чтении из хранилища ключей Azure - PullRequest
0 голосов
/ 15 ноября 2018

Мы столкнулись с приведенным ниже исключением при попытке прочитать секрет из хранилища ключей Azure из приложения фабрики служб.

Приложение использует сертификат клиента для аутентификации с помощью AAD и доступа к KeyVault для получения секрета.

Эта проблема возникает периодически.

Есть ли способ, которым мы могли бы определить основную причину, чтобы избежать повторения этой же ошибки.

Message: AADSTS70002: Error validating credentials. AADSTS50012: Client assertion is not within its valid time range. 
Trace ID: 333ee9c1-c74f-432d-824a-000f38a0e400 
Correlation ID: 35b5cadf-c538-4f75-b1fb-56c4743088f4 
Timestamp: 2018-10-24 06:23:30Z

......

1 Ответ

0 голосов
/ 16 ноября 2018

Подтверждение клиента находится за пределами допустимого диапазона времени.

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

Итак, я предлагаю вам использовать DateTime.UtcNow в качестве стандарта, чтобы установить время начала и окончания вашего токена.Вот пример кода, к которому вы можете обратиться.

private static async Task<string> GetClientAssertiotokenAsync(string tenantId,string clientId)
{
    X509Certificate2 cert = new X509Certificate2(@"D:\Joey\Documents\joey.pfx", "password", X509KeyStorageFlags.MachineKeySet);
    var now = DateTime.UtcNow;
    var tokenHandler = new JwtSecurityTokenHandler();
    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Audience = $"https://login.microsoftonline.com/{tenantId}/oauth2/token",
        Issuer = clientId,
        NotBefore = now.AddHours(1),
        Expires = now.AddHours(3),
        Subject = new ClaimsIdentity(new[] {
        new Claim("sub",clientId)}),
        SigningCredentials = new X509SigningCredentials(cert)
    };
    SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
    string tokenString = tokenHandler.WriteToken(token);
}

Для получения более подробной информации вы можете обратиться к этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...