Мы столкнулись с ошибкой при обновлении IdentityServer4 (2.5.3 - 3.1.0) до Core 3.1 (с 2.2). Внезапно выданные токены не имеют правильной подписи. Мы не изменили алгоритм подписи; по-прежнему использует один и тот же .PFX-сертификат между версиями.
var idSrvBuilder = services.AddIdentityServer(opts =>
{
opts.Events.RaiseErrorEvents = true;
opts.Events.RaiseFailureEvents = true;
opts.Events.RaiseInformationEvents = true;
opts.Events.RaiseSuccessEvents = true;
if (_env.IsProduction())
{
opts.PublicOrigin = Configuration["Globals:IdentityURL"];
}
}).AddSigningCredential(new X509Certificate2(Configuration["Cert:Path"], Configuration["Cert:Password"]));
При использовании промежуточного программного обеспечения OWIN "UseIdentityServerBearerTokenAuthentication" для более старого API он завершается ошибкой, если ValidationMode
равен Local
, но не если он проверяется непосредственно на IdentityServer (с ValidationMode
ValidationEndpoint
). API будет возвращать только «Unauthorized», но работает со старым токеном (тот же сертификат подписывает их!) удаленная полезная нагрузка):
eyJhbGciOiJSUzI1NiIsImtpZCI6IjZCMTM4RUIzMUE4OUExQTdEQTdCNkRGNzMwOTRGMzIzREJFNzhCNjYiLCJ0eXAiOiJKV1QiLCJ4NXQiOiJheE9Pc3hxSm9hZmFlMjMzTUpUekk5dm5pMlkifQ.U3unxhW6act8fQLCLAYBJAZ-lIMiKaghVEUdA3b7iM0mI0UqGmYgYw05SvVXTAT8ZNQPuq0D-97d0Z6VVBC2wH7VAl0daF6sYJyuSUEtDiBPttNQ9MsGBNjcN1HABZ0nv-z_lgG2Z9sgp4blCvc7N8xOsja-kuk6m06I7iOfS7O_YKPtTAXA10OCzdtiJbhYijeTFsBJaWf5-J3XJCtqpp-MGXCboE0gQIlvysKz5_CRaaKYptczw-cTX3sgRIhfWn2VxVujhH7JKeSJan52X-fQ4T47PWuVcWNOrcWheeLAbVDQU1U9DiLVVua3BasnIku5Rx4XcLnqCaokCiWZhg
Со следующим заголовком токена:
{
"alg": "RS256",
"kid": "6B138EB31A89A1A7DA7B6DF73094F323DBE78B66",
"typ": "JWT",
"x5t": "axOOsxqJoafae233MJTzI9vni2Y"
}
Новый:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjZCMTM4RUIzMUE4OUExQTdEQTdCNkRGNzMwOTRGMzIzREJFNzhCNjYiLCJ0eXAiOiJhdCtqd3QiLCJ4NXQiOiJheE9Pc3hxSm9hZmFlMjMzTUpUekk5dm5pMlkifQ.RmKHRk44c6Ele-VbB8lhNsmmcvKFludaWypuBzQzYqR7AEIuLXAuZ-N4I9ooVvQLHisBJT4qA4epEK9xdtf0ELpcvfEe3Yc2dkJnKp_rjJSRuhqyNHD0hPAoxqVSWHhfaLxLiL7_17mklqLDEqwdXANnA2YCO-Q-9wqGALZorywHYucr0X9m2hYm1oVgXPitG_TAqysYVNnLCHVGZRNE7Xmug0XhkJXzQ8RpZuSHlDHFlT2cgb7psEb4NUfA8v5-q-LyqfPDk4xJZX2ia53SoPpiJbByFgscYF4xk54SkkcB9EOxCCsR-IYHJAmyYkhGRpBVWY5xU_9qb2ioIwkzZg
Со следующим заголовком:
{
"alg": "RS256",
"kid": "6B138EB31A89A1A7DA7B6DF73094F323DBE78B66",
"typ": "at+jwt",
"x5t": "axOOsxqJoafae233MJTzI9vni2Y"
}
Полагаю, проблема в том, что "typ"
из нового токена равно "at+jwt"
? Что это обозначает? Я смотрел на выпуски IdentityServers, проблемы с Github, гуглил, искал stackoverflow, но никто, кажется, не заметил таинственный новый "at+jwt"
"typ"
.
Может ли это быть причиной проблемы? Как я могу поручить моей новой версии выпускать стандартную версию JWT? А что это за странный at+jwt
?