#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