使用x5c证书验证JWT

时间:2019-03-06 07:25:03

标签: rust jwt

我很难使用x5c验证令牌。 (MS OAuth / Azure)在Rust中使用jsonwebtoken。

下面是代码...

// 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是正确的算法。
  • 证书正确。我通过添加BEGIN / END证书在jwt.io上进行了尝试,它可以很好地验证。
  • 我使用openssl将BEGIN / END pem转换为DER,并且字节与基数为64的解码相匹配。
  • 密钥URL为:https://login.microsoftonline.com/common/discovery/v2.0/keys,但我的特定租户返回相同的密钥。

任何人都对我在这里做错了什么有见识?

谢谢

编辑:此处的最小工作示例。 https://pastebin.com/RqqRaKkU

0 个答案:

没有答案