создание JWT с заголовком, полезной нагрузкой и подписью в Java - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу сгенерировать jwt для заданного заголовка, полезной нагрузки и секретного ключа.

мой заголовок;

{ "typ": "JWT", "alg": "HS256" }

моя полезная нагрузка;

{ "iss": "46181382", "ist": "project", "iat": 1536225835, "exp": 1536226835, "jti": "abcdefghi" }

мой секретный ключ; 105446462291847624638651561dfg156148df941819498

вот мой java-код, он уже создает jwt. но я думаю, что секретный ключ не включается в него. потому что, как только я использую этот jwt для моего заголовка в вызове API tokbox, я получаю следующий ответ.

 {
"code": -1,
"message": "Invalid signature",
"description": "Invalid signature"
}

вот код;

    byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("105446462291847624638651561dfg156148df941819498");
    Key signingKey = new SecretKeySpec(apiKeySecretBytes, SignatureAlgorithm.HS256.getJcaName());

    Map map = new HashMap<String,Object>();
    map.put("alg","HS256");
    map.put("typ","JWT");

    String jwt = Jwts.builder()
            .setHeader(map)
            .claim("iss", "46181382")
            .claim("ist", "project")
            .claim("iat", currentTimeSeconds())
            .claim("exp", expireTimeSeconds())
            .claim("jti", "abcdefghi")
            .signWith(SignatureAlgorithm.HS256,signingKey)
            .compact();

currentTimeSeconds () и expireTimeSeconds () являются методами, написанными мной. Я уверен, что нет проблем с ними. Я не уверен с этим методом .signWith ().

Может кто-нибудь, пожалуйста, помогите мне.

Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Я нашел ответ.В приведенном выше коде секретный ключ должен быть задан как закодированное значение Base64URL.это означает, что первая строка должна измениться следующим образом.

byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary("MTA1NDQ2NDYyMjkxODQ3NjI0NjM4NjUxNTYxZGZnMTU2MTQ4ZGY5NDE4MTk0OTg=");
...