问题描述
我想使用Arduino框架为ESP8266实现JWT。我需要尽可能少的依赖关系。因此,我想使用“ bearssl / bearssl_hmac.h”库,因为该库已包含在框架中。不利的一面是,没有太多文献记载。 到目前为止,我所得到的是从'CreateToken'方法内部调用的'Sign'方法内部,但是串行调试输出只是如下所示的垃圾。 ��)...몆〜�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);
}
你能给我任何帮助吗?
谢谢
解决方法
出于与您相同的原因,我今天正在调查此问题。我认为您可以得到很好的签名(至少您以与我相同的方式计算SHA256 HMAC)。
HEADER
base64 url是否已编码?
另外,Encode base64 url是否编码json?
有了签名字节后,只需对它们进行base64 url编码,然后将其附加到jsonWebToken的末尾即可。