我是一个相当新手的c ++程序员(我还在上大学所以我想我一般都是一个相当新手的程序员)而且我正在尝试用c ++生成一个JWT.我能够生成并编码头和有效负载,但是当我在jwt.io上检查时,使用openssl的hmac库生成的签名似乎无效.我有一种感觉,这是由于一些细微差别,我只是没有看到.如果你能找到我的错误,我会非常感激.如果您也有关于如何改进我的代码的建议,也将不胜感激.注意我必须使用openssl和boost for json.
********更新
我发现正在添加额外的新行,这会在身份验证期间导致错误.目前我正在调用str.erase来删除它们,但是如果有人可以让我知道他们来的地方我会很感激所以我可以避免操纵字符串
char* Auth::genJWT()
{
ptree pt;
std::stringstream jwt;
//Make and encode header
pt.put("typ","JWT");
pt.put("alg","HS256");
std::ostringstream buf;
write_json(buf, pt, false);
std::string header = buf.str();
jwt << base64_encode((unsigned char*)header.c_str(), (int) header.length());
//clear buffer
pt.clear();
buf.clear();
buf.str("");
//make pay load
pt.put("org_guid", Config::organization_guid);
pt.put("agent_guid", Config::agent_guid);
write_json(buf, pt, false);
std::string payload = buf.str();
jwt << '.' << base64_encode((unsigned char*)payload.c_str(), (int) payload.length());
//sign data
std::string signed_data = signToken(jwt.str());
jwt << '.' << base64_encode((unsigned char*) signed_data.c_str(), (int) signed_data.length());
//jwt made
std::cout …Run Code Online (Sandbox Code Playgroud)