Как декодировать jwt из активного каталога Azure в Kitura?

Я получил токен доступа от azure ad и пытаюсь расшифровать его на сервере kitura.

На jwt.io я могу успешно его декодировать, но не с помощью процедур декодирования jwt из примера проекта kitura. Я использую точный код, указанный в примере проекта kitura на github. Кто-нибудь использовал это с лазурным токеном?


person Matthias Karl    schedule 21.05.2019    source источник
comment
Не могли бы вы предоставить пример токена, который вы пытаетесь декодировать? Вы надеетесь проверить токен или просто расшифровать его? Вы создали структуру, которая моделирует утверждения, которые вы надеетесь декодировать из JWT?   -  person Matt Kilner    schedule 21.05.2019
comment
Я не могу предоставить пример токена. Как я видел, декодирование идет вместе с проверкой в ​​этом образце. Оба пути были бы потрясающими. Должен ли я полностью моделировать токен как заявку?   -  person Matthias Karl    schedule 21.05.2019
comment
Не могли бы вы предоставить ссылку на то, откуда вы сгенерировали токен? Вы можете использовать верификатор .none, чтобы пропустить проверку токена. Это позволит вам определить, связана ли проблема с проверкой или декодированием JWT. Вы можете использовать структуру createdClaimsStandardJWT для декодирования стандартных утверждений. Если у вас есть какие-либо пользовательские утверждения, которые вы хотите декодировать, вам необходимо смоделировать их в своей собственной структуре.   -  person Matt Kilner    schedule 21.05.2019
comment
хорошо... это проблема с претензией. У меня есть токен, аналогичный образцу токена v1 с этого сайта: ссылка на лазурь   -  person Matthias Karl    schedule 21.05.2019


Ответы (1)


Вы должны иметь возможность декодировать токен 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)
person Andrew Lees    schedule 21.05.2019
comment
Декодирование (даже пример строки v1 из ms docs) по-прежнему возвращает ноль. - person Matthias Karl; 21.05.2019
comment
Мне пришлось немного скорректировать заявку, но, наконец, это сработало! Спасибо, Мэтт и Эндрю! - person Matthias Karl; 22.05.2019