我想使用Arduino框架为ESP8266实现JWT。我需要尽可能少的依赖项。所以我想使用"bearssl/bearssl_hmac.h“库,因为这个库已经包含在框架中了。缺点是,它没有太多的文档。到目前为止,我得到的是从'CreateToken‘方法内部调用的'Sign’方法,但Serial Debug输出只是垃圾,如下所示。��)�몆~�j§��␚d�\���O�␞p�yJ␇�np���?p��?�␃��
static void Sign(String payload, String secret, unsigned char buffer[32])
{
br_hmac_key_context keyCtx;
br_hmac_key_init(&keyCtx, &br_sha256_vtable, secret.c_str(), secret.length());
br_hmac_context hmacCtx;
br_hmac_init(&hmacCtx, &keyCtx, 0);
br_hmac_update(&hmacCtx, payload.c_str(), payload.length());
br_hmac_out(&hmacCtx, buffer);
}
static void CreateToken(JsonObjectConst& jsonObj)
{
char json[256];
serializeJson(jsonObj, json);
// DebugPrintln(json);
auto encodedPayload = Encode(json, 256);
DebugPrintln(encodedPayload);
char jsonWebToken[256];
strcpy(jsonWebToken, HEADER);
strcat(jsonWebToken, ".");
strcat(jsonWebToken, encodedPayload);
DebugPrintln(jsonWebToken);
char* secret = "Test";
unsigned char buffer[32];
Sign(jsonWebToken, secret, buffer);
DebugPrintln((char*)buffer);
}你能给我点帮助吗?
谢谢
发布于 2020-11-05 05:54:58
我今天调查这个和你一样的原因。我认为您可以很好地获得签名(至少您可以像我一样计算SHA256 HMAC )。
HEADER base64 url是编码的吗?另外,编码base64 url会编码json吗?
一旦你有了你的签名字节,你只需要对它们进行base64 url编码,并将其附加到你的jsonWebToken的末尾。
https://stackoverflow.com/questions/64269058
复制相似问题