Spring Boot Keycloak - 如何验证承载令牌?
Posted
技术标签:
【中文标题】Spring Boot Keycloak - 如何验证承载令牌?【英文标题】:Spring Boot Keycloak - How to verify Bearer token? 【发布时间】:2017-09-13 09:38:26 【问题描述】:Keycloak 版本 2.4.0_FINAL。
在我的 Spring Boot REST API 中,我想在 Keycloak 中验证不记名令牌。
我按照以下步骤操作:
http://www.keycloak.org/docs/2.4/securing_apps_guide/topics/oidc/java/spring-boot-adapter.html我将 maven 依赖项和以下内容添加到 application.properties。
keycloak.realm = realm
keycloak.auth-server-url = http://localhost:8080/auth
keycloak.ssl-required = external
keycloak.resource = app
keycloak.bearer-only = true
keycloak.credentials.secret = ...
keycloak.securityConstraints[0].securityCollections[0].patterns[0] = /r/secure/*
下一步是什么?据我说,这是最后一步,但它似乎没有做任何事情。
更新 应用程序属性:
server.port = 8081
org.keycloak keycloak-tomcat8-adapter 2.4.0.Final
keycloak.realm = myapp
keycloak.auth-server-url = http://localhost:8080/auth
keycloak.ssl-required = external
keycloak.resource = mybackend
keycloak.bearer-only = true
keycloak.credentials.secret = ...
keycloak.use-resource-role-mappings = false
keycloak.securityConstraints[0].securityCollections[0].name = secure
keycloak.securityConstraints[0].securityCollections[0].patterns[0] = /r/secure/*
【问题讨论】:
你的问题是什么,什么不起作用? keycloak 何时验证令牌?我仍然可以在没有令牌的情况下访问 api,没有反馈。 spring boot 在哪个端口上运行,keycloak 在哪个端口上运行? 弹簧启动在 8081 端口(默认除外) 我已经让弹簧安全适配器 + 弹簧靴一起正常工作。但是,如果您的配置不适合您,您应该进行一些调试。启用 keycloak 适配器的日志(通过logging.level.org.keycloak=DEBUG
)并查看发生了什么。
【参考方案1】:
您的安全约束必须至少包含一个角色,即:
keycloak.security-constraints[0].securityCollections[0].authRoles[0]=admin
请务必在 keycloak 中添加此角色并将其分配给您的用户。
【讨论】:
感谢您解决此问题。 我现在在服务器上收到此错误:NOT_ATTEMPTED: bearer only 添加新问题:***.com/questions/43559997/… 我没有足够的声誉来评论其他问题,但由于某些原因,您的 Spring Boot 应用程序认为 http 请求不是 XHR 请求【参考方案2】:如果您愿意,您可以使用 spring security 解决您的问题。我觉得更好。说明可以在here找到。
例如:
@Override
protected void configure(HttpSecurity http) throws Exception
super.configure(http);
http
.authorizeRequests()
.antMatchers("/customers*").hasRole("USER")
.antMatchers("/admin*").hasRole("ADMIN")
.anyRequest().permitAll();
【讨论】:
以上是关于Spring Boot Keycloak - 如何验证承载令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 微服务架构中使用 Keycloak 实现 JWT?
如何在嵌入式 Spring Boot Keycloak 中设置主题?
如何使用 Angular -> Spring Boot Oauth2 -> Keycloak 获取 keycloak 令牌
如何在 Spring Boot 应用程序中测试 Keycloak 身份验证?