Секьюритизация службы отдыха с использованием JWT - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь реализовать аутентификацию на основе токенов в моем веб-сервисе. Я следовал этому уроку: Учебник

Во-первых, когда я получаю токен из веб-службы и проверяю его здесь: Веб-сайт для проверки токена 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());
    }
}

Заранее спасибо.

1 Ответ

0 голосов
/ 29 июня 2018

Решено, благодаря @jps:

", значит, ваша строка" Сравнение токенов "является выводом из фильтра, верно ?! Тогда в нем отсутствуют первые 6 символов, что объясняет полученное вами исключение. Вероятно, 6 символов удаляются в token = authorizationHeader.substring (" Bearer ".length ()). trim ();. Я полагаю, вы не добавили слово" Bearer "в запрос, и теперь вместо удаления" Bearer "удаляются первые 6 символов токена"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...