Как использовать Keycloak JWT для аутентификации в Micronaut GraphQL

#graphql #jwt #keycloak #micronaut

Вопрос:

Я пытаюсь использовать Micronaut GraphQL, используя keycloak JWT. Я смог заставить все работать с базовой аутентификацией, вместо этого пытаясь перейти на токен на предъявителя, и мне чего-то не хватает, так как я всегда получаю 401 Несанкционированный, но я не вижу никаких полезных сообщений об ошибках в журнале, даже если для отслеживания настроено ведение журнала

Использование Micronaut 3.0.0.

Мое заявление.yml выглядит так:

 micronaut:  application:  name: myapp  server:  cors:  enabled: true  port: 8080  security:  authentication: bearer  intercept-url-map:  - pattern: /graphiql  access:  - isAnonymous()  - pattern: /graphql  access:  - isAuthenticated()  endpoints:  login:  enabled: false  token:  jwt:  enabled: true  signatures:  jwks:  keycloak:  url: http://xx.xx.xx.xx:8090/auth/realms/myrealm/protocol/openid-connect/certs  oauth2.clients.keycloak:  grant-type: password  client-id: myapp-backend  client-secret: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  authorization:  url: http://xx.xx.xx.xx:8090/auth/realms/myrealm/protocol/openid-connect/auth custom:  keycloak:  url: http://xx.xx.xx.xx:8090  graphql:  enabled: true  path: /graphql  graphiql:  enabled: true  path: /graphiql  

вот что я публикую, чтобы проверить:

 curl --location --request POST 'localhost:8080/graphql'  --header 'Authorization: Bearer {exceptionally long jwt token}'  --header 'Content-Type: application/json'  --data-raw '{"query":"query test { scenarios { id } }","operationName":"test"}'  

Я не уверен, что еще было бы полезно предоставить. Есть какие-нибудь мысли?

Комментарии:

1. Как выглядит ваш запрос?

2. добавлено добавлено мое тестовое заявление curl (с удаленным токеном jwt)

3. Я мало что знаю о micronaut, но разве не должна быть конфигурация openid?

Ответ №1:

Я мало что знаю о Micronaut, но разве в этом не отсутствует конфигурация openid, подобная этой:

 micronaut:  security:  oauth2.clients.keycloak.openid:  issuer: http://xx.xx.xx.xx:8090/auth/realms/myrealm  

Комментарии:

1. нет, это не исправило мою ошибку, однако моя проблема заключалась в том, что я перепутал свое имя царства. Я опубликую ответ с минимально необходимой конфигурацией для потомства.

2. чтобы быть ясным, это было полезно, потому что у меня не был полностью указан мой URL-адрес в этом custom.keycloak.url разделе.

Ответ №2:

После дополнительных поисков и пошагового выполнения в отладчике я смог, наконец, определить, что я неправильно ввел имя своей области.

Однако для потомков вот минимальная конфигурация, которую мне нужно было запустить:

 micronaut:  application:  name: myapplication  server:  cors:  enabled: true  port: 8080  security:  enabled: true  authentication: bearer  intercept-url-map:  - pattern: /graphiql  access:  - isAnonymous()  - pattern: /graphql  access:  - isAuthenticated()  endpoints:  login:  enabled: false  token:  jwt:  enabled: true  signatures:  jwks:  keycloak:  url: http://xx.xx.xx.xx:8090/auth/realms/MyRealm/protocol/openid-connect/certs  oauth2.clients.keycloak:  grant-type: password  client-id: myapp-backend  client-secret: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  authorization:  url: http://xx.xx.xx.xx:8090/auth/realms/MyRealm/protocol/openid-connect/auth  custom:  keycloak:  url: http://xx.xx.xx.xx:8090/auth/realms/MyRealm  graphql:  enabled: true  graphiql.enabled: true  graphql-ws.enabled: true