Я пытаюсь реализовать аутентификацию на основе токенов в моем веб-сервисе.
Я следовал этому уроку: Учебник
Во-первых, когда я получаю токен из веб-службы и проверяю его здесь: Веб-сайт для проверки токена JWT Я получил сообщение: недопустимая подпись
И когда я пытался идентифицировать свой токен из моего веб-сервиса (между моим приложением и ws), эта функция выдает исключение:
Unable to read JSON value: XXXX (some data...)
Вот код для генерации токена:
private String issueToken(String username) {
SecretKey key = keyGenerator.generateKey();
String jwtToken = Jwts.builder()
.setSubject(username)
.setIssuer(context.getAbsolutePath().toString())
.setIssuedAt(new Date())
.setExpiration(Date.from(LocalDateTime.now().plusMinutes(60L).toInstant(ZoneOffset.UTC)))
.signWith(SignatureAlgorithm.HS512, key)
.compact();
return jwtToken;
}
А вот код для проверки правильности отправленного токена:
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
// Get the HTTP Authorization header from the request
String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
// Extract the token from the HTTP Authorization header
String token = "";
if(authorizationHeader != null)
token = authorizationHeader.substring("Bearer".length()).trim();
try {
// Validate the token
SecretKey key = keyGenerator.generateKey();
System.out.println(token);
System.out.println(key);
Jwts.parser().setSigningKey(key).parseClaimsJws(token);
} catch (Exception e) {
System.out.println(e.getMessage());
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
}
}
Заранее спасибо.