Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме QuarkusВсе вопросы
QuarkusSeniorКодинг

Как реализовать безопасность в Quarkus с помощью @RolesAllowed и JWT?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Quarkus защищает эндпоинты через @RolesAllowed с JWT-токенами, валидируемыми либо локально (quarkus-smallrye-jwt + PEM-ключ), либо через OIDC-провайдер (quarkus-oidc). Роли берутся из клейма groups, JsonWebToken инжектируется через CDI для доступа к claims.

Зависимости

<!-- Вариант 1: локальная валидация JWT -->
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-smallrye-jwt</artifactId>
</dependency>

<!-- Вариант 2: OIDC (Keycloak, Auth0 и др.) -->
<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-oidc</artifactId>
</dependency>

Механизм безопасности в Quarkus

Quarkus реализует безопасность через расширения quarkus-smallrye-jwt (локальная валидация JWT) и quarkus-oidc (OIDC/Keycloak). @RolesAllowed — стандартная Jakarta EE-аннотация, работающая с обоими вариантами.

Конфигурация SmallRye JWT

# application.properties
mp.jwt.verify.publickey.location=META-INF/resources/publicKey.pem
mp.jwt.verify.issuer=https://auth.example.com
quarkus.smallrye-jwt.blocking-authentication=true

Защита эндпоинтов через @RolesAllowed

import jakarta.annotation.security.RolesAllowed;
import jakarta.annotation.security.PermitAll;
import jakarta.annotation.security.DenyAll;
import org.eclipse.microprofile.jwt.JsonWebToken;

@Path("/api/orders")
@RequestScoped
public class OrderResource {

    @Inject
    JsonWebToken jwt;  // инжекция распарсенного токена

    @GET
    @PermitAll
    public List<Order> listPublic() {
        return orderService.findPublic();
    }

    @GET
    @Path("/my")
    @RolesAllowed({"user", "admin"})
    public List<Order> myOrders() {
        String userId = jwt.getSubject();
        return orderService.findByUser(userId);
    }

    @DELETE
    @Path("/{id}")
    @RolesAllowed("admin")
    public Response delete(@PathParam("id") Long id) {
        orderService.delete(id);
        return Response.noContent().build();
    }

    @GET
    @Path("/internal")
    @DenyAll  // всегда 403, даже с токеном
    public Response internal() {
        return Response.ok().build();
    }
}

Создание и подпись JWT (для тестов / сервис-аккаунтов)

// В тестах используйте io.smallrye.jwt.build.Jwt
String token = Jwt.issuer("https://auth.example.com")
    .subject("user-123")
    .groups(Set.of("user", "admin"))
    .expiresIn(Duration.ofHours(1))
    .sign(); // подписывает приватным ключом из test-resources

Извлечение Claims

@Inject
@Claim("email")
String userEmail;

@Inject
@Claim(ClaimConstants.GROUPS)
Set<String> roles;

// Или напрямую через JsonWebToken:
String customClaim = jwt.getClaim("org_id");

Политики на уровне конфигурации (без аннотаций)

quarkus.http.auth.permission.admin-only.paths=/api/admin/*
quarkus.http.auth.permission.admin-only.policy=role-policy-admin
quarkus.http.auth.policy.role-policy-admin.roles-allowed=admin

quarkus.http.auth.permission.authenticated.paths=/api/*
quarkus.http.auth.permission.authenticated.policy=authenticated

Тестирование с @TestSecurity

@QuarkusTest
public class OrderResourceTest {

    @Test
    @TestSecurity(user = "alice", roles = {"admin"})
    public void adminCanDelete() {
        given()
            .when().delete("/api/orders/1")
            .then().statusCode(204);
    }

    @Test
    public void anonymousIsUnauthorized() {
        given()
            .when().get("/api/orders/my")
            .then().statusCode(401);
    }
}

Подводные камни

  • Роли в JWT берутся из клейма groups (MicroProfile JWT spec) — Keycloak по умолчанию кладёт их в realm_access.roles; нужна кастомная маппинг-логика или quarkus.oidc.roles.role-claim-path=realm_access/roles.
  • @RolesAllowed на уровне класса применяется ко всем методам, но метод-аннотация переопределяет её — порядок приоритетов неочевиден.
  • Без @RequestScoped или @ApplicationScoped инжекция JsonWebToken может вернуть пустой токен в не-JAX-RS контексте.
  • В native-сборке PEM-ключ должен быть в resources, а не загружаться по HTTP-URL — это ломает холодный старт при недоступности JWKS-эндпоинта.
  • Истечение токена (exp) проверяется автоматически, но clock skew между сервисами вызывает ложные 401 — настройте mp.jwt.token.age или синхронизацию NTP.
  • Алгоритм подписи по умолчанию RS256; если выдаётся HS256-токен, SmallRye JWT отклонит его — явно укажите quarkus.smallrye-jwt.token.signature-algorithm=HS256.
  • @PermitAll на методе не отменяет политику authenticated, заданную через application.properties — конфигурационные политики имеют приоритет.
  • Не смешивать quarkus-smallrye-jwt и quarkus-oidc в одном приложении без явного указания quarkus.http.auth.proactive=false — возможны конфликты механизмов аутентификации.

Частые вопросы на собеседовании

  • Как Quarkus достигает быстрого времени запуска и низкого потребления памяти?
  • Что такое Quarkus и какие проблемы он решает по сравнению с традиционными Java-фреймворками?
  • Как Quarkus поддерживает разработку RESTful API с помощью RESTEasy Reactive?
  • В чём разница между JVM-режимом и native-режимом Quarkus?

Типичные ошибки

  • Путать термин «rolesallowed jwt» с соседним механизмом Quarkus.
  • Не называть границу lifecycle, transaction, thread или request для «rolesallowed jwt».
  • Игнорировать production-эффекты «rolesallowed jwt»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «rolesallowed jwt» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «rolesallowed jwt».
  • Уточнить, какие настройки или API меняют «rolesallowed jwt» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Quarkus →

Источники

  • https://quarkus.io/guides/security-authorize-web-endpoints-reference
←Предыдущий вопросВ каких backend-проектах Quarkus является сильным выбором, а где лучше выбрать более простой или другой стек?Следующий вопрос→В чём разница между `@ApplicationScoped`, `@RequestScoped` и `@Singleton` в Quarkus?

Связанные темы

Quarkusapi-securityimplementationthreat-modeling