Сравнение @PreAuthorization с пользовательским атрибутом JWT - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь защитить приложение Spring Boot 2.2.2 с помощью Keycloak 8.0.1.

Маркер JWT выглядит следующим образом (обратите внимание на дополнительное поле customer_id):

{ user: {
    authorities: [...],
    details: {
      roles: [...],
      principal: {
        name: "first",
        keycloakSecurityContext: {
          token: {
            ...,
            customer_id: "first",
            ...
          } } } } } }

Я хочу защитить эту точку входа:

// eg.: http://localhost:9000/customers/first
@GetMapping(@Path path = "/customers/{customerId}")
@PreAuthorize("hasPermission(????.customer_id == #customerId)
public Object customerEntryPoint(@PathVariable String customerId) {
    ...
}

Что будет подходящим выражением @PreAuthorization, поэтому я сравниваю поле customer_id в токене с предоставленным параметром customerId?

1 Ответ

0 голосов
/ 22 января 2020

Через 2 часа мне удается найти решение, которое не слишком изящно:

@PreAuthorize("principal.keycloakSecurityContext.token.getOtherClaims().get('customer_id')==#customerId")

Если кто-то может предложить более элегантное решение, я буду признателен за это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...