java - 带 Keycloak 的 Quarkus GraphQL 客户端

标签 java graphql keycloak quarkus

我现在已经尝试了几天,但不确定我是否错过了一些东西。

我有一个 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/

相关文章:

java - 修复我的循环并需要输入检查器、Java 方面的帮助

java - android map api 无法从 Fragment 转换为 MapFragment

javascript - Next js 和 Apollo - Cookie 未被传递

keycloak - 在keycloak中设置两层角色模型

java - Spring在非常简单的程序中忽略@Qualifier

java - Android:单击按钮后隐藏键盘

reactjs - Relay + React 的测试策略

node.js - 我可以使用 ApolloClient 订阅 Appsync graphql 吗?

javascript - 获取Keycloak中登录用户的角色

node.js - Keycloak:使用 nodeJS 的 authZ