Обновление System.IdentityModel.Tokens.Jwt, вызывающее нарушение в IdentityServer3 Client

Надеюсь, это будет легко решить.

Пакет Microsoft System.IdentityModels.Tokens.Jwt был обновлен вчера на NuGet от 4.0.2.206211351 до v5.0. Это, к сожалению, вызывает изменение с некоторым "стандартным" кодом IdentityServer3. то есть взяты из их образцов кода, поэтому я думаю, что многие разработчики могут увидеть эту проблему в ближайшие дни.

Оригинальный код

используя версию пакета v4.0.2.xxxxxx. У меня

using System.IdentityModel.Tokens;

в пространстве имен.

то в Способе Конфигурации начинается как:

public void Configuration(IAppBuilder app)
    {
        AntiForgeryConfig.UniqueClaimTypeIdentifier = "sub";

        JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        { ... };

После обновления

После обновления строки конфигирования:

JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();

Вызывает проблемы.

Первое, что класс, по-видимому, переместился в пространство имен System.IdentityModel.Tokens.Jwt, это не так уж плохо.

Однако теперь я получаю ошибку Object reference required for a non-static field на JwtSecurityTokenHandler.InboundClaimTypeMap.

Мне что-то не хватает, другая библиотека, которая требовала или что-то происходит до того, как вызывается Startup.Configuration(), который нуждается в копании?

Ответы

Ответ 1

Когда вы идете к доктору и говорите: "всегда больно, когда я это делаю" - врач ответит "затем прекратить это делать";)

v4 → v5 по определению является нарушающим изменением. Вам нужен v5?

Сказанное - простое исследование intellisense могло бы привести к тому, что они переименовали InboundClaimTypeMap в DefaultInboundClaimTypeMap.

Будьте готовы к дальнейшим нарушениям на пути.

Ответ 2

Проверка доступа к токенам в OWIN несовместима с system.identitymodel v5 - вам нужно перейти на v4 - См. здесь проблему