Мне трудно аутентифицировать токен с помощью 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