Я получил токен доступа от azure ad и пытаюсь расшифровать его на сервере kitura.
На jwt.io я могу успешно его декодировать, но не с помощью процедур декодирования jwt из примера проекта kitura. Я использую точный код, указанный в примере проекта kitura на github. Кто-нибудь использовал это с лазурным токеном?
Я не могу предоставить пример токена. Как я видел, декодирование идет вместе с проверкой в этом образце. Оба пути были бы потрясающими. Должен ли я полностью моделировать токен как заявку?
Не могли бы вы предоставить ссылку на то, откуда вы сгенерировали токен? Вы можете использовать верификатор .none
, чтобы пропустить проверку токена. Это позволит вам определить, связана ли проблема с проверкой или декодированием JWT. Вы можете использовать предоставленную структуруClaimsStandardJWT
для декодирования стандартных утверждений. Если у вас есть какие-либо пользовательские утверждения, которые вы хотите декодировать, вам необходимо смоделировать их в своей собственной структуре.
хорошо... это проблема с претензией. У меня есть токен, похожий на образец токена v1 с этого сайта: ссылка на лазурь
Вы должны иметь возможность декодировать токен v1 в структуру без проверки, используя следующий код:
struct AzureJWTClaims: Claims {
let aud: String
let iss: String
let iat: Date
let nbf: Date
let exp: Date
let acr: String
let aio: String
let amr: [String]
let appid: String
let appidacr: String
let email: String
let family_name: String
let given_name: String
let idp: String
let ipaddr: String
let name: String
let oid: String
let rh: String
let scp: String
let sub: String
let tid: String
let unique_name: String
let uti: String
let ver: String
}
let jwt = try? JWT<AzureJWTClaims>(jwtString: "<YourJWTString>", verifier: .none)
Если вы также хотите проверить JWT, вам нужно создать JWTVerifier
из открытого ключа RSA, закодированного PEM:
let verifier = JWTVerifier.rs256(publicKey: Data("<PEM public key>".utf8))
Затем передайте это декодеру:
let verifiedJWT = try? JWT<AzureJWTClaims>(jwtString: "<YourJWTString>", verifier: verifier)
Декодирование (даже пример строки v1 из ms docs) по-прежнему возвращает ноль.
Пришлось немного подкорректировать заявку, но наконец-то это сработало! Спасибо, Мэтт и Эндрю!
Не могли бы вы предоставить пример токена, который вы пытаетесь декодировать? Вы надеетесь проверить токен или просто расшифровать его? Вы создали структуру, которая моделирует утверждения, которые вы надеетесь декодировать из JWT?