簡體   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