feat(CIE): Implement OIDC RP Service with login, callback, and session management

This commit is contained in:
gabdevele
2026-06-16 23:33:59 +02:00 Unverified
parent bb7ed18539
commit 5f81d2dcf7
31 changed files with 3218 additions and 4 deletions
+52
View File
@@ -0,0 +1,52 @@
#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