70 lines
2.3 KiB
Markdown
70 lines
2.3 KiB
Markdown
|
---
|
|||
|
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)
|