Я пытался Quarkus интеграция безопасности с keycloak
Вот мои остальные конечные точки
@Path("/jwt")
@RequestScoped
public class JWTRestController {
@Inject
@Claim(standard = Claims.preferred_username)
Optional<JsonString> currentUsername;
@GET
@Path("/user")
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed({"user"})
public String userData() {
return "data for user ";
}
@GET
@Path("/admin")
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed({"admin"})
public String adminData() {
return "data for admin ";
}
}
Свойства моего приложения
# Configuration file
quarkus.http.port=8082
# MP-JWT Config
mp.jwt.verify.publickey.location=http://localhost:8180/auth/realms/demo/protocol/openid-connect/certs
mp.jwt.verify.issuer=http://localhost:8180/auth/realms/demo
quarkus.smallrye-jwt.auth-mechanism=MP-JWT
quarkus.smallrye-jwt.realmName=quarkus-keycloak-demo
quarkus.smallrye-jwt.enabled=true
У меня запущен экземпляр keycloak на моей локальной машине для разработки через порт 8180 Я выполнил все требования для keycloak и создал область, пользователя, роли
I Я могу получить токен из Keycloak следующим образом -
export access_token=$(\
curl -X POST http://localhost:8180/auth/realms/demo/protocol/openid-connect/token \
--user demo-client:e0da2ad7-5f4c-49b3-ae54-dbd7a28d532a \
-H 'content-type: application/x-www-form-urlencoded' \
-d 'username=user&password=user&grant_type=password' | jq --raw-output '.access_token' \
)
Но вот проблема при попытке доступа к точке отдыха / jwt / user
curl -v -H "Authorization: Bearer $access_token" http://localhost:8082/jwt/user
Это приводит к
< HTTP/1.1 403 Forbidden
< Content-Length: 9
< Content-Type: text/plain;charset=UTF-8
<
* Connection #0 to host localhost left intact
Forbidden* Closing connection 0
Вот подробности токена (я использую отладчик jwt.io, чтобы заглянуть внутрь токена)
![enter image description here](https://i.stack.imgur.com/7AzDy.png)
Любая помощь будет высоко ценится