digital-garden/knowledge/dev/java/frameworks/quarkus/Реализация JWT авторизации в Quarkus.md

70 lines
2.3 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
aliases:
tags:
- зрелость/🌱
- tag/quarkus
- tag/auth
- tag/jwt
date:
- - 2024-03-03
zero-link:
- "[[Quarkus]]"
parents:
linked:
---
Quarkus из коробки поддерживаеет JWT авторизацию.
Чтобы получить возможность создавать JWT необходимо добавить зависимость
```xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-jwt-build</artifactId>
</dependency>
```
Чтобы получить возможность валидировать JWT необходимо добавить зависимость
```xml
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-jwt</artifactId>
</dependency>
```
Далее необходимо [сгенерировать приватный и публичный ключ](Генерация%20ключей%20с%20использованием%20openssl.md). После чего положить их в папку `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-контроллер, который будет отдавать пользователям токен.
```java
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"})`.
## Дополнительные материалы
- [Using JWT RBAC - Quarkus](https://quarkus.io/guides/security-jwt)