keycloak - Quarkus + keycloak - HTTP/1.1 403 Forbidden
问题描述
我正在尝试Quarkus与keycloak的安全集成
这是我的休息端点
@Path("/jwt")
@RequestScoped
public class JWTRestController {
@Inject
@Claim(standard = Claims.preferred_username)
Optional<JsonString> currentUsername;
@GET
@Path("/user")
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed({"user"})
public String userData() {
return "data for user ";
}
@GET
@Path("/admin")
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed({"admin"})
public String adminData() {
return "data for admin ";
}
}
我的应用程序属性
# Configuration file
quarkus.http.port=8082
# MP-JWT Config
mp.jwt.verify.publickey.location=http://localhost:8180/auth/realms/demo/protocol/openid-connect/certs
mp.jwt.verify.issuer=http://localhost:8180/auth/realms/demo
quarkus.smallrye-jwt.auth-mechanism=MP-JWT
quarkus.smallrye-jwt.realmName=quarkus-keycloak-demo
quarkus.smallrye-jwt.enabled=true
我在端口 8180 上的本地开发机器上运行了keycloak实例我已经完成了 keycloak 的所有必要条件并创建了领域、用户、角色
我可以从 keycloak 获取令牌,如下所示 -
export access_token=$(\
curl -X POST http://localhost:8180/auth/realms/demo/protocol/openid-connect/token \
--user demo-client:e0da2ad7-5f4c-49b3-ae54-dbd7a28d532a \
-H 'content-type: application/x-www-form-urlencoded' \
-d 'username=user&password=user&grant_type=password' | jq --raw-output '.access_token' \
)
但是当尝试访问休息点/jwt/user时出现问题
curl -v -H "Authorization: Bearer $access_token" http://localhost:8082/jwt/user
结果是
< HTTP/1.1 403 Forbidden
< Content-Length: 9
< Content-Type: text/plain;charset=UTF-8
<
* Connection #0 to host localhost left intact
Forbidden* Closing connection 0
这是令牌详细信息(我使用 jwt.io 调试器查看令牌内部)
Anyhelp将不胜感激
解决方案
请使用 quarkus-oidc,对于接受不记名令牌的服务应用程序,请遵循https://quarkus.io/guides/security-openid-connect
推荐阅读
- node.js - Angular 8:由于不允许的 MIME 类型(“text/html”),从“url”加载模块被阻止
- ios - iOS:如何在键盘按键后停止接收keyboardWillShowNotification
- reactjs - 当我单击reactjs中的按钮时,按升序和降序对表格进行排序
- asp.net - 从 ABP.io 禁用多租户
- here-api - 如何向设备发送路由?
- java - 如何为嵌套的 JAR 文件创建自定义 ClassLoader
- php - 通过ajax从命名空间中删除斜杠向控制器发送请求?
- python - IndexError::: 列表索引超出范围
- c++ - C++ 是否支持用于测试目的的参数化函数?
- ios - 如何隐藏 iPhone X 的主页指示器在应用程序委托中编写通用代码