Sporadic SecurityTokenSignatureKeyNotFoundException после входа - PullRequest
0 голосов
/ 12 июня 2019

Иногда я получаю исключение 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
    };
});

Почему я получаю эту ошибку? Ничего здесь не нужно аутентифицировать из чегоЯ понимаю. Это также происходит спорадически, но когда это происходит, это, как правило, происходит несколько раз подряд и у нескольких пользователей.

Есть идеи, что я здесь не так делаю?

...