rust - 使用 x5c 证书验证 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,并且字节从 base 64 解码匹配。
- 密钥 URL 是:https ://login.microsoftonline.com/common/discovery/v2.0/keys但我的特定租户返回相同的密钥。
有人对我在这里做错了什么有一些见解吗?
谢谢
编辑:这里的最小工作示例。https://pastebin.com/RqqRaKkU
解决方案
推荐阅读
- cppcheck - 为什么静态分析工具缺少这个看似显而易见的案例?
- airflow - 触发直联任务失败的气流错误处理任务触发规则
- electron - 在锁定屏幕中监听按键 - Electron
- javascript - 获取文件名和父目录名的方法
- c# - swaggerwcf 仅适用于多项目解决方案中的 newtonsoft 8.0.3.0
- r - 如何使用 gmailr 发送“重要”消息?
- google-sheets - 替换 Google 表格中的占位符文本
- node.js - Node.js HTTP 服务器无法响应 websocket
- excel - Excel VBA - 在页面加载时单击网页元素?
- python - 如何在处理 API 错误时中断 for 循环,以免丢失所有数据