Использование сертификата x5c для проверки JWT - PullRequest
0 голосов
/ 06 марта 2019

Мне трудно аутентифицировать токен с помощью x5c.(MS OAuth / Azure) Использование jsonwebtoken в Rust.

Ниже приведен код ...

// Trying to isolate the problem by only checking the signature. 
let validation_config = jsonwebtoken::Validation {
    algorithms: vec![jsonwebtoken::Algorithm::RS256],
    leeway: 0,
    validate_exp: false,
    validate_iat: false,
    validate_nbf: false,
    aud: None,
    iss: None,
    sub: None
};
let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIn...";
let x5c_cert = "MIIDBTCCAe2gAwIBAgIQKOfEJNDyDplBSXKYcM..."; 

let raw_der = base64::decode_config(der, base64::STANDARD).unwrap();
let d = jsonwebtoken::decode::<MsOAuthPayload>(&token, &raw_der, &validation_config);

Выше всегда возвращается InvalidSignature.

  • RS265 - правильный алгоритм.
  • TheСертификат правильный.Я попробовал это на jwt.io, добавив сертификат BEGIN / END, и он подтвердил правильность.
  • Я использовал openssl для преобразования pem BEGIN / END в DER, и байты совпадают с декодированием base 64.
  • Ключевой URL-адрес: https://login.microsoftonline.com/common/discovery/v2.0/keys, но мой конкретный арендатор возвращает те же ключи.

Кто-нибудь может понять, что я здесь не так делаю?

Спасибо

РЕДАКТИРОВАТЬ: минимальный рабочий пример здесь.https://pastebin.com/RqqRaKkU

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...