Jjwt-jackson 0.12.6: невозможно проанализировать JWT с помощью пользовательских утверждений.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Jjwt-jackson 0.12.6: невозможно проанализировать JWT с помощью пользовательских утверждений.

Сообщение Anonymous »


Заголовок: Невозможно проанализировать JWT с помощью пользовательских утверждений с помощью jjwt-jackson 0.12.6Тело:
Я работаю с библиотекой jjwt (версия 0.12.6) для создания и анализа токенов JWT. которые включают в себя пользовательские претензии. Пользовательские утверждения включают полномочия пользователя, и для анализа я использую расширение Jackson. Однако когда я пытаюсь проанализировать токен JWT, я сталкиваюсь с проблемами, и утверждения анализируются неправильно.
Вот код, с которым я работаю:

Код: Выделить всё

import com.damal.backend.account.entity.Account;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;

import javax.crypto.SecretKey;
import java.time.Duration;
import java.util.Date;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;

@Service
public class JwtService {
private static final String AUTHORITIES = "authorities";
private static final String JWT_SECRET_KEY_PROPERTY = "${application.security.jwt.secret-key}";

@Value(JWT_SECRET_KEY_PROPERTY)
private String secretKey;

public Optional extractUsernameFromToken(String token) {
return extractClaimFromToken(token, Claims::getSubject);
}

public  Optional extractClaimFromToken(String token, Function claimsResolver) {
final Claims claims = extractAllClaimsFromToken(token);
return Optional.ofNullable(claimsResolver.apply(claims));
}

public String generateTokenWithClaims(Map extraClaims, Account user, Duration expirationDuration) {
return Jwts.builder()
.claims(extraClaims)
.subject(user.getUsername())
.issuedAt(new Date(System.currentTimeMillis()))
.expiration(new Date(System.currentTimeMillis() + expirationDuration.toMillis()))
.claim(AUTHORITIES, user.getAuthorities().stream()
.map(GrantedAuthority::getAuthority)
.toList())
.signWith(getDecodedSigningKey())
.compact();
}

public boolean isTokenValidForUser(String token, UserDetails userDetails) {
final Optional username = extractUsernameFromToken(token);
return username.isPresent()
&& username.get().equals(userDetails.getUsername())
&& !isTokenExpired(token);
}

public boolean isTokenExpired(String token) {
Date expiration = extractExpirationDateFromToken(token).orElse(new Date());
return expiration.before(new Date());
}

private Optional extractExpirationDateFromToken(String token) {
return extractClaimFromToken(token, Claims::getExpiration);
}

private Claims extractAllClaimsFromToken(String token) {
return Jwts.parser()
.verifyWith(getDecodedSigningKey())
.build()
.parseSignedClaims(token)
.getPayload();
}

private SecretKey getDecodedSigningKey() {
byte[] keyBytes = Decoders.BASE64.decode(secretKey);
return Keys.hmacShaKeyFor(keyBytes);
}
}
Проблема:
  • Я генерирую токен с настраиваемым утверждением (авторитетами) и секретным ключом, но когда Я пытаюсь проанализировать токен, но он не может правильно проанализировать утверждения.
  • Я использую расширение Джексона (

    Код: Выделить всё

    jjwt-jackson
    ) для обработки синтаксического анализа JWT, и проблема, по-видимому, связана с анализом пользовательских утверждений.
Что я пробовал до сих пор:) h3>
  • Я обновил метод extractAllClaimsFromToken для анализа JWT с помощью Jwts.parser() и secretKey, но я получаю ошибки синтаксического анализа.
  • Я проверил, что secretKey правильно закодирован и декодирован в Base64.
Дополнительная информация:
  • Я использую Spring Security для аутентификации пользователей, а утверждение полномочий содержит список ролей.
  • Я хочу получить пользовательские утверждения (например, полномочия) из JWT после анализа.
Будем очень признательны за любую помощь или предложения о том, как исправить анализ токена с помощью пользовательских утверждений!

Подробнее здесь: https://stackoverflow.com/questions/792 ... tom-claims
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как проанализировать rfc7517jwkset с jjwt
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как проанализировать набор RFC7517 JWK с JJWT?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как проанализировать набор RFC7517 JWK с JJWT?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Как добавить нулевые утверждения к токену JWT в JJWT (Джексон)
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Проблема с методом parserBuilder() в библиотеке JJWT для проверки токена JWT.
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»