Сбой проверки подписи JWT, Java на php

java php json web jwt

813 просмотра

2 ответа

Я делюсь с вами первыми кодами

php коды http://pastebin.com/b8TNfyzq строка 22

JwtTester.java http://pastebin.com/TsF0wsCX line 22

Токен, созданный в коде Java, который я написал на сервере php, не соответствует токену. Хотя я не могу проверить один и тот же ключ с обеих сторон

Я использую github.com/jwtk/jjwt в коде Java и github.com/firebase/php-jwt в кодах PHP

То же самое с кодом Java и данными в ключе, состоит из разных токенов, когда я создаю токен только в PHP

Автор: SefaTunçkanat Источник Размещён: 08.11.2019 11:29

Ответы (2)


0 плюса

Это проблема преобразования формата. jjwt требует ключ, закодированный в base64, а php-jwt использует простую строку

Jjwt JwtBuilder

JwtBuilder signWith(SignatureAlgorithm alg, String base64EncodedSecretKey);

Php-JWT JWT

 /**
 * Decodes a JWT string into a PHP object.
 *
 * @param string        $jwt            The JWT
 * @param string|array  $key            The key, or map of keys.
 *                                      If the algorithm used is asymmetric, this is the public key
public static function decode($jwt, $key, $allowed_algs = array()

Кодируйте ваш ключ в base64 перед вызовом JwtBuilder.signWith

builder.signWith(SignatureAlgorithm.HS256, 
                               DatatypeConverter.printBase64Binary(key));
Автор: pedrofb Размещён: 20.08.2016 04:58

0 плюса

для людей, все еще сталкивающихся с проблемой. если вы создаете jwt из java, тогда добавьте к нему заголовок «typ», который проверяется PHP-jwt. Также jjwt кодирует ключ к base64 так из Java

String jwtSecret = "yoursecret";

Map<String, Object> header = new HashMap<>();
header.put("typ", Header.JWT_TYPE);

String jwt = Jwts.builder()
                    .setHeader(header)
                    .setSubject("someclaim")
                    .setIssuedAt(new Date())
                    .setExpiration(expiryDate)
                    .signWith(SignatureAlgorithm.HS512,TextCodec.BASE64.encode(jwtSecret))
                    .compact();

в php

define('SECRET', 'yoursecret');
$decoded = (array) JWT::decode($jwt,SECRET, array('HS512'));

Кроме того, кажется, что он не декодируется правильно, если секрет содержит специальные символы.

Автор: Arif Размещён: 06.07.2018 08:31
Вопросы из категории :
32x32