Проблемы, пытающиеся проверить JWT в Java, используя Auth0 - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть веб-сайт и сервер Java, которые общаются.Когда пользователь на веб-сайте входит в систему с надлежащими учетными данными, сервер генерирует JWT и отправляет его клиенту.Токен создается следующим образом:

Calendar cal = Calendar.getInstance();

JwtToken token = new JwtToken(JWT.create()
            .withIssuer(user.getEmail())
            .withClaim("username", user.getUsername())
            .withIssuedAt(cal.getTime())
            .withExpiresAt(addHours(2))
            .sign(algorithm));

Где метод addHours () просто берет текущее время и добавляет к нему n часов.

и алгоритм, который используется в знаке ():

Algorithm algorithm = Algorithm.HMAC256(secret);

С секретом, генерируемым:

Random random = new Random();
byte[] randomBytes = new byte[32];
random.nextBytes(randomBytes);
return Base64.getUrlEncoder().encodeToString(randomBytes);

, который, я думаю, должен создать 256 случайных битов и кодировать их base64.(Я где-то читал, что секрет должен состоять из 256 битов в кодировке base64, я не уверен, что это правильно, пожалуйста, дайте мне знать)

Все это прекрасно работает и дает мне знак, который я считаю правильным(веб-сайт https://jwt.io говорит, что он также действителен).Пример маркера: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqdXN0aW4yNTA4OTlAaG90bWFpbC5jb20iLCJleHAiOjE1NDQ4MjUzOTIsImlhdCI6MTU0NDgxODE5MiwidXNlcm5hbWUiOiJKdXN0aW4ifQ.C2Tft5oy8fleYNz4oVCw6S28VGU7YzguA428sZ59QUM

1017 * Так что лексема получает отправить обратно пользователю, и он получает хранится в виде печенья.Когда пользователь пытается получить доступ к чему-либо, требующему аутентификации, он отправляет запрос с токеном в заголовке «Авторизация».

На сервере я получаю этот токен из заголовка и пытаюсь проверить его.Здесь я сталкиваюсь с проблемами.В настоящее время я делаю следующее:

DecodedJWT decoded = JWT.decode(token);

JWTVerifier = JWT.require(algorithm).withIssuer(decoded.getIssuer()).build();

verifier.verify(token);

Это дает мне следующее исключение:

com.auth0.jwt.exceptions.SignatureVerificationException: The Token's Signature resulted invalid when verified using the Algorithm: HmacSHA256

Любая помощь будет высоко ценится

...