oauth-2.0 - Quarkus Web 应用程序无法使用 JWT 和 Keycloak 进行授权
问题描述
我正在尝试使用 Keycloak 中的代码授权流向 Quarkus 应用程序授权用户。这是 Quarkus 配置
# OIDC Configuration
quarkus.oidc.auth-server-url=http://localhost:8180/auth/realms/quarkus
quarkus.oidc.client-id=web-application
quarkus.oidc.credentials.secret=ca21b304-XXX-XXX-XXX-51d38ef5da02
quarkus.oidc.application-type=web-app
quarkus.oidc.authentication.scopes=email
“web-application”的客户端配置仅启用了标准流程(对于代码授予流程)
- 我访问http://localhost:8080/
- 我被重定向到 Keycloak(网址看起来不错
scope=openid+email&response_type=code&client_id=web-application
- 我使用示例用户帐户登录
- 我被重定向回代码
- 然后我在 Quarkus 中得到一个异常
Caused by: org.keycloak.authorization.client.util.HttpResponseException: Unexpected response from server: 401 / Unauthorized / Response from server: {"error":"unauthorized_client","error_description":"Client not enabled to retrieve service account"}
at org.keycloak.authorization.client.util.HttpMethod.execute(HttpMethod.java:95)
at org.keycloak.authorization.client.util.HttpMethodResponse$2.execute(HttpMethodResponse.java:50)
at org.keycloak.authorization.client.util.TokenCallable.obtainAccessToken(TokenCallable.java:121)
at org.keycloak.authorization.client.util.TokenCallable.call(TokenCallable.java:57)
at org.keycloak.authorization.client.resource.ProtectedResource.createFindRequest(ProtectedResource.java:276)
at org.keycloak.authorization.client.resource.ProtectedResource.access$300(ProtectedResource.java:38)
at org.keycloak.authorization.client.resource.ProtectedResource$5.call(ProtectedResource.java:205)
at org.keycloak.authorization.client.resource.ProtectedResource$5.call(ProtectedResource.java:202)
at org.keycloak.authorization.client.resource.ProtectedResource.find(ProtectedResource.java:210)
Keycloak中的错误是:
09:58:25,420 WARN [org.keycloak.events] (default task-30) type=CLIENT_LOGIN_ERROR, realmId=quarkus, clientId=web-application, userId=null, ipAddress=172.17.0.1, error=invalid_client, grant_type=client_credentials, client_auth_method=client-secret
问题:为什么 Quarkus 尝试使用“grant_type=client_credentials”?它应该使用授权类型 = “authorization_code”。这看起来像 Quarkus 中的一个错误,但也许有一个标志。
解决方案
“已启用服务帐户”已关闭。启用它应该可以解决问题。
推荐阅读
- javascript - 用于匹配双引号中的字符串的正则表达式,例如 "name":"some_name"
- node.js - 在本地执行 lambda 函数时无法获取 NodeJS 路由获取页面未找到响应
- kubernetes - 无法通过公共 IP 访问 AKS 中的 .NetCore 应用
- tensorflow - 如何取一层中所有通道的平均值
- json - 如何在xml文件的标头中定义json的类型
- ruby-on-rails - Webapp 和 Wordpress 都可以从 root 访问
- ios - 如何在 iOS Swift 中将 UIButton 动作从视图控制器调用到另一个视图控制器?
- html - 导航按钮不在徽标一侧
- angular - Angular:9 如何从另一个兄弟组件更改变量?
- android - 如何在左侧回收器视图中添加线条颜色