Иногда я получаю исключение SecurityTokenSignatureKeyNotFoundException при получении заявок на мои услуги, и я не могу понять, почему, поскольку ни одна из конечных точек не помечена как разрешающая.
После входа в систему я получаю обратный вызов из Active Directory вМикросервис называется ClaimCollector, который имеет следующий контроллер, который работает нормально:
[Route("[controller]")]
public class IdentityController : Controller
{
public IdentityController(...)
{
//...
}
[HttpPost]
public async Task<IActionResult> Post([FromBody] B2CIdentityRequest identityRequest)
{
// Some db lookup
// A new request to new microservice called Account
return Ok(response);
}
}
Затем мы получаем следующий контроллер / функцию в Account, который иногда выдает ошибку:
[Produces("application/json")]
[Route("[controller]")]
public class ClaimsController : Controller
{
public ClaimsController()
{
}
[HttpGet]
[Route("{userId}")]
public async Task<IActionResult> GetClaimsByUserId([FromRoute] Guid userId)
{
// ..
}
}
InПриложения Insights Я вижу зависимость от ClaimCollector для учетных записей, и я вижу, что запрос начинает обрабатываться в учетных записях.Первое, что происходит в Учетных записях, - это следующее исключение:
Message:
IDX10501: Signature validation failed. Unable to match keys: '[PII is hidden]', token: '[PII is hidden]'.
Exception type:
Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException
Failed method:
System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature
FormattedMessage:
Failed to validate the token eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IkN0ZlFDOExlLThOc0M3b0MyelFrWnBjcmZ .....
Неудачный токен дан мне из "https://graph.windows.net". Из того, что я понимаю, я никогда не прошу этот ключ кбыть авторизованным, поэтому я не могу понять, почему происходит сбой.
Я также получаю следующую трассировку: Носитель не был аутентифицирован. Сообщение об ошибке: IDX10501: Ошибка проверки подписи. Невозможно сопоставить ключи: '[PII скрыт]', токен:' [PII скрыт] '
Вот как настроена аутентификация в Service Fabric:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(bearerOptions =>
{
bearerOptions.Authority = authority; // Url to "Identity" server
bearerOptions.Audience = clientId; // ID of client application
bearerOptions.SaveToken = true; // cache token for faster authentication
bearerOptions.IncludeErrorDetails = true;
bearerOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = BearerOptionsEventHandler.AuthenticationFailed, // This function just logs
OnTokenValidated = BearerOptionsEventHandler.OnTokenValidated // This function just logs
};
});
Почему я получаю эту ошибку? Ничего здесь не нужно аутентифицировать из чегоЯ понимаю. Это также происходит спорадически, но когда это происходит, это, как правило, происходит несколько раз подряд и у нескольких пользователей.
Есть идеи, что я здесь не так делаю?