Возникла проблема при входе в систему при использовании более одного модуля kubernete в качестве сервера аутентификации. При доступе к аутентификации Api основной сайт всегда получает ключ, однако ниже возникает ошибка. Более того, эта ошибка возникает случайно - я не могу зайти на сайт несколько раз подряд, потому что возникает ошибка проверки, но затем проверка проходит, и я попадаю на сайт. Или я могу зайти на сайт в первый раз - я не могу понять, в чем проблема. Токены, как вы видите в ошибке, полностью действительны, потому что поля малыша идентичны
Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Signature validation failed. Unable to match keys:
kid: 'b654c7d2a47506037f76315343c28206',
token: '{"alg":"RS256","kid":"b654c7d2a47506037f76315343c28206","typ":"JWT"}.{"nbf":1580961436,"exp":1580965036,"iss":"***.AuthenticationService","aud":["***.AuthenticationService/resources","api"],"client_id":"MVC_Password","sub":"***","auth_time":1580961436,"idp":"local","preferred_username":"***","unique_name":"***","fullname":"***","email":"***","email_verified":false,"phone_number":"***","phone_number_verified":false,"scope":["permission","role"],"amr":["pwd"]}'.
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token, TokenValidationParameters validationParameters)
at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token, TokenValidationParameters validationParameters, SecurityToken& validatedToken)
at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()
Это настройки моего приложения:
services
.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddIdentityServerAuthentication(options =>
{
options.Authority = Configuration.Get<AppSettings>().IdentityServiceUrl;
options.RequireHttpsMetadata = false;
options.NameClaimType = "fullname";
options.RoleClaimType = "role";
IdentityModelEventSource.ShowPII = true;
options.JwtBearerEvents.OnAuthenticationFailed = context =>
{
context.NoResult();
return Task.CompletedTask;
};
});