为什么 quarkus.oidc.credentials.secret 被忽略了?
Why is quarkus.oidc.credentials.secret being ignored?
我有一个 SPA (Vue.js),它通过 REST 与 Quarkus 资源 API 进行通信。
我正在为 Authentication/Authorization.
使用自己的 Keycloak
在 Keycloak 中,我的领域中有两个客户端:
Client ID: frontend-client
Access Type: public
Standard Flow enabled
Client ID: backend-client
Access Type: bearer-only
Secret: mySecret
我的 application.properties 我的 Quarkus API:
quarkus.oidc.auth-server-url=https://localhost:8082/auth/realms/myrealm
#quarkus.oidc.client-id=backend-service
#quarkus.oidc.credentials.secret=mySecret
我的 SPA 使用标准流程通过 Keycloak 进行身份验证,然后重定向到我的应用程序 ✅
然后我可以向我的 API 发出请求并且一切正常 尽管 quarkus.oidc.client-id 和 quarkus.oidc.credentials.secret 被注释掉了 !这是为什么?当这些行未被注释掉但具有 false 值时,它也有效。
为什么 Quarkus 忽略这些行,更重要的是,它为什么有效?
更新
添加依赖项
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-keycloak-authorization</artifactId>
</dependency>
允许我将此添加到 application.properties:
quarkus.keycloak.policy-enforcer.enable=true
现在导致这个错误:
{"error":"invalid_client","error_description":"Bearer-only not allowed"}
但至少现在秘密没有被忽略,提供错误的秘密会导致正确的错误。
跟进问题:为什么不允许bearer-only?
我猜是因为您的 Quarkus 应用程序使用仅承载客户端,它只会使用签名检查承载令牌的真实性。
由于它不会调用 Keycloak 进行额外验证,因此它不会在您的属性中使用客户端 ID 和客户端密码。
如果您想让 quarkus 使用它,您需要将客户端类型更改为机密。
顺便说一句,在用于保护服务应用程序的 quarkus quickstart 中:keycloak 客户端使用机密客户端,并且 bearer only 设置为 false :https://github.com/quarkusio/quarkus-quickstarts/blob/main/security-openid-connect-quickstart/config/quarkus-realm.json#L395
我有一个 SPA (Vue.js),它通过 REST 与 Quarkus 资源 API 进行通信。 我正在为 Authentication/Authorization.
使用自己的 Keycloak在 Keycloak 中,我的领域中有两个客户端:
Client ID: frontend-client
Access Type: public
Standard Flow enabled
Client ID: backend-client
Access Type: bearer-only
Secret: mySecret
我的 application.properties 我的 Quarkus API:
quarkus.oidc.auth-server-url=https://localhost:8082/auth/realms/myrealm
#quarkus.oidc.client-id=backend-service
#quarkus.oidc.credentials.secret=mySecret
我的 SPA 使用标准流程通过 Keycloak 进行身份验证,然后重定向到我的应用程序 ✅
然后我可以向我的 API 发出请求并且一切正常 尽管 quarkus.oidc.client-id 和 quarkus.oidc.credentials.secret 被注释掉了 !这是为什么?当这些行未被注释掉但具有 false 值时,它也有效。
为什么 Quarkus 忽略这些行,更重要的是,它为什么有效?
更新 添加依赖项
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-keycloak-authorization</artifactId>
</dependency>
允许我将此添加到 application.properties:
quarkus.keycloak.policy-enforcer.enable=true
现在导致这个错误:
{"error":"invalid_client","error_description":"Bearer-only not allowed"}
但至少现在秘密没有被忽略,提供错误的秘密会导致正确的错误。
跟进问题:为什么不允许bearer-only?
我猜是因为您的 Quarkus 应用程序使用仅承载客户端,它只会使用签名检查承载令牌的真实性。
由于它不会调用 Keycloak 进行额外验证,因此它不会在您的属性中使用客户端 ID 和客户端密码。
如果您想让 quarkus 使用它,您需要将客户端类型更改为机密。
顺便说一句,在用于保护服务应用程序的 quarkus quickstart 中:keycloak 客户端使用机密客户端,并且 bearer only 设置为 false :https://github.com/quarkusio/quarkus-quickstarts/blob/main/security-openid-connect-quickstart/config/quarkus-realm.json#L395