Почему Quarkus JWT неавторизованный возврат на каждой конечной точке

Я пытаюсь защитить свой Quarkus API с помощью JWT. Предоставляется JWT (фрагмент: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUI[...]).

Следующие конечные точки - это 2 конечные точки, которые я тестировал:

@Path("/quiz")
@RequestScoped
public class SomeResource {
  @Inject
  JsonWebToken jwt;

  @POST
  @RolesAllowed({"magister"})
  @Path("/save")
  @Consumes("application/json")
  @Produces("*/*")
  @Transactional
  public Response save(@RequestBody Quiz quiz) { }

  @GET
  @PermitAll
  @Path("/get/all")
  @Produces("application/json")
  public Response getAll(){ }

Обе конечные точки (@PermitAll и @RolesAllowed) возвращают мне HTTP 401 (неавторизованный).

Вы знаете почему? Я думал, что @PermitAll разрешает КАЖДЫЙ запрос? Хотя мой токен доказывает, что у меня есть необходимая роль:

"resource_access" : {
  "client_interface" : {
    "roles" : ["magister"]
  },
  ...
}

Изменить: выяснилось, что спецификация MicroProfile говорит, что

"groups":["magister"]

должен быть сопоставлен микропрофилем с аннотациями RolesAllowed.

Моя полезная нагрузка выглядит так:

{
  [...]
  "resource_access": {
    "client_interface": {
      "roles": [
        "magister"
      ]
    },
    "account": {
      "roles": [
        "manage-account",
        "manage-account-links",
        "view-profile"
      ]
    }
  },
  "scope": "profile email",
  "email_verified": false,
  "groups": [
    "magister"
  ],
  "preferred_username": "magister"
}

но я все равно получу ответ 401


person R. Polito    schedule 22.02.2021    source источник


Ответы (1)


У меня была такая же проблема, я исправил ее, добавив следующий код:

@OpenAPIDefinition(
        info = @Info(
                title = "Title API",
                version = "1.0.0",
                description = "Description API"
        ),
        security = @SecurityRequirement(name = "jwt"),
        components = @Components(
                securitySchemes = {
                        @SecurityScheme(
                                securitySchemeName = "jwt",
                                description = "Token JWT",
                                type = SecuritySchemeType.HTTP,
                                scheme = "bearer",
                                bearerFormat = "jwt"
                        )
                }
        )
)

а также сделал обновление Quarkus до версии 1.12.0.FINAL

person Guilherme Ogliari    schedule 10.03.2021
comment
ай круто спасибо! - person R. Polito; 10.03.2021