Подтвердить что ты не робот

Пространства имен для проверки подлинности JWT.NET: система против Microsoft

Я пытаюсь использовать JWT для аутентификации приложения Node в веб-API ASP.NET.

В ASP.NET я использую .NET 4.5.1 и пакет nuget System.IdentityModel.Tokens.Jwt 5.0.0

Я не понимаю, почему пространства имен смешиваются между Microsoft и System.

Например:

var tokenReader = new JwtSecurityTokenHandler();

tokenReader.ValidateToken(token, 
                new TokenValidationParameters()
            {
                ValidateAudience = false
            },
                out validatedToken);    

Основной JwtSecurityTokenHandler находится в пространстве имен System.IdentityModel.Tokens.Jwt, но класс TokenValidationParameters и его зависимости находятся в пространстве имен Microsoft.IdentityModel.Tokens и, возможно, сталкиваются с аналогичными классами в пространстве имен System.IdentityModel.Tokens.

Это по дизайну или это возможный признак несоответствия версии где-то еще?

4b9b3361

Ответ 1

Если вы посмотрите на зависимость для

nuget System.IdentityModel.Tokens.Jwt 4.0.2

vs

nuget System.IdentityModel.Tokens.Jwt 5.0

вы увидите, что 5.0 имеет зависимость от

Зависимости

.NETFramework 4.5.1

Microsoft.IdentityModel.Tokens( >= 5.0.0)

что 4.0 не было. Фактически, предыдущей версии не было.

Microsoft реструктурирует свои фреймворки, чтобы быть более легкими. В рамках размера ASP.NET у вас будет много функциональных сокращений.

Чтобы сделать WIF более легким, оставив обратную совместимость, было принято решение удалить избыточную функциональность из таких библиотек, как System.IdentityModel.Tokens.Jwt больше не зависит от System.IdentityModel.Tokens, а вместо этого - от Microsoft.IdentityModel.Tokens. Одним из неудачных результатов является то, что оба слоя выставляют одни и те же методы.

Ответ 2

В этих случаях, когда вы экземпляр, вы должны предоставить все пространство имен, чтобы сообщить компилятору, какой класс и пространство имен вы ссылаетесь. Таким образом, вы избежите конфликтов.

Microsoft.Identity устарела в NET 4.5. И вы можете увидеть больше здесь: https://social.msdn.microsoft.com/Forums/vstudio/en-US/256c6bcd-6752-4487-b2e8-6c63f4efb9e9/difference-between-microsoftidentitymodel-and-systemidentitymodel?forum=Geneva