[英]How to verify JWT signature using RSA public key in C++
我想知道是否有示例 C++ 代码或库可以使用 RSA 公钥验证我的 JWT 令牌签名。 我找不到任何涉及 C++ 的示例
openssl for C++ 没有我能找到的与 RSA 相关的任何示例。
谢谢
这对于jwt-cpp库来说非常简单,下面是一个验证使用 RS256 密钥签名的令牌的示例代码:
#include <iostream>
#include <jwt-cpp/jwt.h>
int main() {
const std::string token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdCI6MTU5NDIwOTYwMCwicm9sZSI6InVzZXIifQ.YLOVSKef-paSnnM8P2JLaU2FiS8TbhYqjewLmgRJfCj1Q6rVehAHQ-lABnKoRjlEmHZX-rufHEocDxGUYiGMjMexUQ3zt-WqZITvozJ4pkvbV-mJ1nKj64NmqaR9ZkBWtmF-PHJX50eYjgo9rzLKbVOKYOUa5rDkJPHP3U0aaBXFP39zsGdOTuELv436WXypIZBeRq2yA_mDH13TvzegWCK5sjD4Gh177bCq57tBYjhGIQrDypVe4cWBPlvwFlmG8tdpWGu0uFp0GcbTAfLUlbTSuGROj88BY0XeUs0iqmGlEICES3uqNx7vEmdT5k_AmL436SLedE0VHcyxve5ypQ";
try
{
// Parse token
const auto decoded = jwt::decode(token);
// Validate token
const auto verifier = jwt::verify()
.allow_algorithm(jwt::algorithm::rs256{ R"(-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzyis1ZjfNB0bBgKFMSv
vkTtwlvBsaJq7S5wA+kzeVOVpVWwkWdVha4s38XM/pa/yr47av7+z3VTmvDRyAHc
aT92whREFpLv9cj5lTeJSibyr/Mrm/YtjCZVWgaOYIhwrXwKLqPr/11inWsAkfIy
tvHWTxZYEcXLgAXFuUuaS3uF9gEiNQwzGTU1v0FqkqTBr4B8nW3HCN47XUu0t8Y0
e+lf4s4OxQawWD79J9/5d3Ry0vbV3Am1FtGJiJvOwRsIfVChDpYStTcHTCMqtvWb
V6L11BWkpzGXSW4Hv43qa+GSYOD2QU68Mb59oSk2OB+BtOLpJofmbGEGgvmwyCI9
MwIDAQAB
-----END PUBLIC KEY-----)" });
// Don't forget to add validation an issuer of token ("iss" claim in the payload)
// .with_issuer("issuer");
verifier.verify(decoded);
// Print claims from payload
for (auto& e : decoded.get_payload_claims())
std::cout << e.first << " = " << e.second << std::endl;
}
catch (const std::system_error& e) {
std::cout << "Verification error: " << e.what() << std::endl;
}
catch (...)
{
std::cout << "Unknown verification error" << std::endl;
}
}
您可以使用公钥或证书进行验证,只需以PEM格式传递即可:
-----BEGIN PUBLIC KEY-----
[key]
-----END PUBLIC KEY-----
或者
-----BEGIN CERTIFICATE-----
[certificate]
-----END CERTIFICATE-----
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.