digital-garden/knowledge/dev/java/frameworks/quarkus/Реализация JWT авторизации в Quarkus.md
2024-06-13 21:01:37 +03:00

2.3 KiB
Raw Blame History

aliases tags date zero-link parents linked
зрелость/🌱
tag/quarkus
tag/auth
tag/jwt
2024-03-03
Quarkus

Quarkus из коробки поддерживаеет JWT авторизацию.

Чтобы получить возможность создавать JWT необходимо добавить зависимость

<dependency>  
    <groupId>io.quarkus</groupId>  
    <artifactId>quarkus-smallrye-jwt-build</artifactId>  
</dependency>

Чтобы получить возможность валидировать JWT необходимо добавить зависимость

<dependency>  
    <groupId>io.quarkus</groupId>  
    <artifactId>quarkus-smallrye-jwt</artifactId>  
</dependency>

Далее необходимо сгенерировать приватный и публичный ключ. После чего положить их в папку src/main/resources.

Далее необходимо отредактировать файл application.yml

quarkus:
  native:
    resources:
      includes:
        - publicKey.pem
smallrye:
  jwt:
    sign:
      key:
        location: privateKey.pem
mp:  
  jwt:
    verify:
      publickey:
        location: publicKey.pem
      issuer: http://localhost:8080

Теперь Quarkus будет самостоятельно проверять HTTP Header на наличие JWT токена и проверять его валидность.

Генерация токена происходит вручную. Необходимо написать REST-контроллер, который будет отдавать пользователям токен.

Jwt.issuer("http://localhost:8080")  
        .up(person.getEmail())  
        .expiresIn(Duration.ofMinutes(15))  
        .groups(Collections.singleton("USER"))  
        .claim("id", person.getId())  
        .sign()

После этого над REST-эндпойнтами можно использовать аннотации из пакета jakarta.annotation.security.*: @PermitAll, @RolesAllowed({"USER"}).

Дополнительные материалы