繁体   English   中英

如何使用 C++ 中的 RSA 公钥验证 JWT 签名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM