Files
backend/common/OidcJwt.h
T

53 lines
1.3 KiB
C++

#pragma once
#include <json/json.h>
#include <optional>
#include <string>
#include <vector>
namespace visione::oidc
{
struct Jwk
{
std::string kty;
std::string use;
std::string alg;
std::string kid;
std::string n;
std::string e;
std::string d;
std::string p;
std::string q;
};
struct JwtParts
{
Json::Value header;
Json::Value payload;
std::string encodedHeader;
std::string encodedPayload;
std::string encodedSignature;
};
Jwk parseJwk(const Json::Value &value);
Json::Value jwkToPublicJson(const Jwk &jwk);
std::string base64UrlEncode(const std::string &value);
std::string base64UrlDecode(const std::string &value);
std::string randomUrlSafeString(size_t sizeBytes);
std::string signJwt(const Json::Value &header,
const Json::Value &payload,
const Jwk &jwk);
bool verifyJwtSignature(const std::string &jwt, const Jwk &jwk);
JwtParts parseJwt(const std::string &jwt);
Json::Value parseJsonObjectJwtPayload(const std::string &jwt);
std::optional<Jwk> findJwkByKid(const std::vector<Jwk> &jwks,
const std::string &kid);
std::string sha256Base64Url(const std::string &value);
std::string leftHashBase64Url(const std::string &value);
} // namespace visione::oidc