C++11 で JSON Web トークンを作成および検証するためのヘッダーのみのライブラリ。優れた紹介については、これをお読みください。
目的は、多用途で普遍的に適用可能なアルゴリズム、クラス、データ構造のコレクションを提供し、適応性と、すでに使用している他のライブラリとのシームレスな統合を促進することです。
jwt-cpp は、標準で指定されているすべてのアルゴリズムを包括的にサポートします。そのモジュール設計により、複雑な問題を引き起こすことなく、追加のアルゴリズムをシームレスに組み込むことが容易になります。新しいアルゴリズムに貢献したい場合は、お気軽にプル リクエストを開始するか、問題をオープンしてください。
完全を期すために、サポートされているすべてのアルゴリズムのリストを次に示します。
HMSC | RSA | ECDSA | PSS | EdDSA |
---|---|---|---|---|
HS256 | RS256 | ES256 | PS256 | Ed25519 |
HS384 | RS384 | ES384 | PS384 | エド448 |
HS512 | RS512 | ES512 | PS512 | |
ES256K |
インストール手順については、こちらをご覧ください。
簡単な例としては、トークンをデコードし、そのクレームをすべて出力してみましょう (試してみてください)。
# include < jwt-cpp/jwt.h >
# include < iostream >
int main () {
std::string token = " eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCIsInNhbXBsZSI6InRlc3QifQ.lQm3N2bVlqt2-1L-FsOjtR6uE-L4E9zJutMWKIe1v1M " ;
auto decoded = jwt::decode (token);
for ( auto & e : decoded. get_payload_json ())
std::cout << e. first << " = " << e. second << std::endl;
}
リポジトリのクローンを作成した後、この例をローカルでビルドして実行できます。いくつかのコマンドを実行すると、JWT ペイロードの内容が表示されます。
cmake .
cmake --build . --target print-claims
./print-claims
# iss = "auth0"
# sample = "test"
JWT は暗号化されておらず、否認防止を提供するために暗号的に署名されていることがすぐにわかります。
トークンを検証するには、まず検証ツールを構築し、それを使用してデコードされたトークンを検証します。
auto verifier = jwt::verify()
.with_issuer( " auth0 " )
.with_claim( " sample " , jwt::claim(std::string( " test " )))
.allow_algorithm(jwt::algorithm::hs256{ " secret " });
verifier.verify(decoded_token);
ベリファイアはステートレスであるため、さまざまなトークンに再利用できます。
上記のトークンの作成 (および署名) も同様に簡単です。
auto token = jwt::create()
.set_type( " JWS " )
.set_issuer( " auth0 " )
.set_payload_claim( " sample " , jwt::claim(std::string( " test " )))
.sign(jwt::algorithm::hs256{ " secret " });
より固有のトークンを発行または検証したい場合は、RSA 公開鍵と秘密鍵、楕円曲線トークンなどを使用した例をチェックしてください。
柔軟性を提供するという目標に基づいて構築されます。
jwt-cpp は、OpenSSL、LibreSSL、wolfSSL をサポートします。テスト済みバージョンのリストについては、このページで詳細を確認してください。
このコンテキストでは、特定の JSON ライブラリへの厳密な依存はありません。代わりに、 jwt-cpp は型特性に基づいてテンプレート化された汎用のjwt::basic_claim
を利用します。このトレイトは、値、オブジェクト、配列、文字列、数値、整数、およびブール値のセマンティックな JSON タイプと、それらの間でシームレスに変換するメソッドを提供します。
この設計により、ニーズに最適な JSON ライブラリを柔軟に選択できます。提供されている JSON 特性の 1 つを利用するには、詳細なガイダンスについて docs/traits.md を参照してください。
jwt::basic_claim<my_favorite_json_library_traits> claim (json::object({{ " json " , true },{ " example " , 0 }}));
トレイトの実装を記述する方法については、次の手順を確認してください。
JWT の Base64 仕様に関して、このライブラリには、必要なすべてのバリアントを含むbase.h
が含まれています。ライブラリ自体は優れた Base64 実装を提供しますが、Base64 実装は広く利用可能であり、さまざまなパフォーマンス レベルを示していることに注目する価値があります。独自の Base64 実装を使用したい場合は、 JWT_DISABLE_BASE64
定義して jwt-cpp 実装を除外するオプションがあります。
改善のための提案がある場合、またはバグを特定した場合は、遠慮なく問題をオープンするか、プル リクエストを作成して貢献してください。バグを報告する場合は、問題の再現を容易にするために、コンパイラのバージョンやその他の関連情報を含む、環境に関する包括的な詳細を提供してください。さらに、新しい機能を導入する場合は、その機能を検証するための対応するテスト ケースを必ず含めてください。
jwt-cpp を使用するには、次のツールが必要です。
テストケースを構築するには、以下も必要です
ヒントについては FAQ を参照してください。