我现在已经尝试了几天,但不确定我是否错过了一些东西。
我有一个 Quarkus GraphQL 服务,如下所示:https://quarkus.io/guides/smallrye-graphql
我已经设置了 Keycloak 来保护它。
现在我想使用 Qute 和 GraphQL Smallrye 客户端创建一个客户端,如下所示:https://quarkus.io/guides/smallrye-graphql-client
客户端可以连接到服务,但我总是收到“数据获取错误:io.quarkus.security.UnauthorizedException”。
GraphQL 客户端似乎没有正确发送 header 或者没有发送任何...
有谁知道如何告诉客户端每次调用时都从 keycloak 发送授权 header ?
PS:我用一个简短的 React 前端对其进行了测试,它正在工作,所以这似乎是 header 的 graphql 客户端问题......有一些想法吗?
最佳答案
不确定您使用的是动态客户端还是类型安全客户端,因此我将同时描述这两者。
对于这两种类型,如果您有一个在应用程序生命周期内不会更改的 key ,则可以通过添加如下配置属性来配置它:
quarkus.smallrye-graphql-client.CLIENT_NAME.header.HEADER_NAME=HEADER_VALUE
(参见https://quarkus.io/guides/all-config#quarkus-smallrye-graphql-client_quarkus-smallrye-graphql-client-smallrye-graphql-client)
如果该值会随着时间的推移而变化,我可能会建议使用编程构建器而不是使用静态配置的客户端,如下所示:
DynamicGraphQLClientBuilder.newBuilder()
.header("KEY", "VALUE") // obtain the correct value from Keycloak and pass it here
....
如果值发生变化,则构建一个新的客户端实例。
对于类型安全客户端,https://smallrye.io/smallrye-graphql/1.4.3/typesafe-client-headers/ 中描述了基于注释的方式。
我对 Keycloak 不太了解,所以我无法评论如何从中获取 header 值。 让我知道其中一些对您有用
关于java - 带 Keycloak 的 Quarkus GraphQL 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71500950/