Я использовал библиотеку JWT для декодирования веб-токена Json и хотел бы перейти на официальную реализацию JWT от Microsoft, System.IdentityModel.Tokens.Jwt .
Документация очень скудная, поэтому мне сложно понять, как добиться того, что я делал с библиотекой JWT. В библиотеке JWT есть метод Decode, который берет JWT в кодировке base64 и превращает его в JSON, который затем можно десериализовать. Я хотел бы сделать что-то подобное с помощью System.IdentityModel.Tokens.Jwt, но после изрядного количества копаний не могу понять, как это сделать.
Как бы то ни было, я читаю токен JWT из файла cookie для использования с платформой идентификации Google.
Любая помощь будет оценена.
Ответы:
Внутри пакета есть класс,
JwtSecurityTokenHandler
производный отSystem.IdentityModel.Tokens.SecurityTokenHandler
. В WIF это основной класс для десериализации и сериализации токенов безопасности.У класса есть
ReadToken(String)
метод, который принимает вашу строку JWT в кодировке base64 и возвращает a,SecurityToken
который представляет JWT.SecurityTokenHandler
Также естьValidateToken(SecurityToken)
метод , который принимает вашSecurityToken
и создаетReadOnlyCollection<ClaimsIdentity>
. Обычно для JWT это будет одинClaimsIdentity
объект с набором утверждений, представляющих свойства исходного JWT.JwtSecurityTokenHandler
определяет некоторые дополнительные перегрузкиValidateToken
, в частности, дляClaimsPrincipal ValidateToken(JwtSecurityToken, TokenValidationParameters)
перегрузки.TokenValidationParameters
Аргумент позволяет указать сертификат маркеров подписи (в виде спискаX509SecurityTokens
). Он также имеет перегрузку, которая воспринимает JWT как файл,string
а не какSecurityToken
.Код для этого довольно сложен, но его можно найти в коде (
TokenValidationHandler
классе) Global.asax.cx в образце разработчика под названием «ADAL - Собственное приложение для службы REST - Аутентификация с ACS через диалог браузера», расположенном по адресуhttp://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc
В качестве альтернативы у
JwtSecurityToken
класса есть дополнительные методы, которых нет в базовомSecurityToken
классе, напримерClaims
свойство, которое получает содержащиеся утверждения без прохождения черезClaimsIdentity
коллекцию. У него также естьPayload
свойство, которое возвращаетJwtPayload
объект, который позволяет вам получить необработанный JSON токена. Выбор наиболее подходящего подхода зависит от вашего сценария.Общая (т.е. не относящаяся к JWT) документация для
SecurityTokenHandler
класса находится по адресуhttp://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.securitytokenhandler.aspx
В зависимости от вашего приложения вы можете настроить обработчик JWT в конвейер WIF точно так же, как любой другой обработчик.
Три его образца используются в различных приложениях по адресу:
http://code.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&f%5B0%5D.Value=aal&f%5B1%5D.Type=User&f%5B1%5D.Value=Azure% 20AD% 20Developer% 20Experience% 20Team & f% 5B1% 5D.Text = Azure% 20AD% 20Developer% 20Experience% 20Team
Возможно, один будет соответствовать вашим потребностям или, по крайней мере, будет адаптирован к ним.
источник
Мне просто интересно, зачем вообще использовать некоторые библиотеки для декодирования и проверки токена JWT.
Закодированный токен JWT можно создать, используя следующий псевдокод
Очень легко обойтись без какой-либо конкретной библиотеки. Используя следующий код:
Декодирование токена - это обратная версия кода, приведенного выше. Для проверки подписи вам потребуется то же самое и сравнить часть подписи с рассчитанной подписью.
ОБНОВЛЕНИЕ: для тех, кто борется за кодирование / декодирование urlsafe base64, см. Другой вопрос SO , а также вики и RFC
источник