У меня есть веб-сайт и сервер 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
Любая помощь будет высоко ценится