procedure CreateJWT(PayloadJsonInfo: JsonObject; SignKey: Text; Algorithm: Text; ExpireIn: Integer) JWTToken: Text
var
CryptographyMgt: Codeunit "Cryptography Management";
BaseConvert: Codeunit "Base64 Convert";
Header, PayLoad, Signature : Text;
JWTHeaderLbl: Label '{"alg":"%1","typ":"JWT"}', Locked = true;
JWTIssuedAtLbl: Label 'iat', Locked = true;
JWTExpireInLbl: Label 'exp', Locked = true;
begin
PayloadJsonInfo.Add(JWTIssuedAtLbl, GetCurentDateTimeAsUnixTimeStamp());
PayloadJsonInfo.Add(JWTExpireInLbl, GetCurentDateTimeAsUnixTimeStamp() + ExpireIn);
PayloadJsonInfo.WriteTo(PayLoad);
Header := BaseConvert.ToBase64(StrSubstNo(JWTHeaderLbl, Algorithm)).Replace('=', '');
PayLoad := BaseConvert.ToBase64(PayLoad).Replace('=', '');
JWTToken := Header + '.' + PayLoad;
Signature := CryptographyMgt.GenerateHashAsBase64String(JWTToken, SignKey, Enum::"Hash Algorithm"::SHA256);
JWTToken := JWTToken + '.' + Signature.Replace('=', '').Replace('/', '_').Replace('+', '-');
end;