Я пытаюсь защитить свой 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