Spring 引导 - KeyCloak 定向到 403 禁止
Spring Boot - KeyCloak directed to 403 forbidden
我是Keycloak新手,使用的是官方教程项目
https://github.com/sebastienblanc/spring-boot-keycloak-tutorial
为了与 Springboot 应用程序集成,我已经成功设置了 KeyCloak 服务器,spring 引导应用程序也指向我在我在 KeyCloak 上创建的 Realm 上创建的客户端应用程序,在提供正确的凭据后它指向被禁止的页面。
@Controller
class ProductController {
@GetMapping(path = "/products")
public String getProducts(Model model){
model.addAttribute("products", Arrays.asList("iPad","iPhone","iPod"));
return "products";
}
@GetMapping(path = "/logout")
public String logout(HttpServletRequest request) throws ServletException {
request.logout();
return "/";
}
}
Application.properties 文件
keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=springdemo
keycloak.resource=product-app
keycloak.public-client=true
keycloak.security-constraints[0].authRoles[0]=testuser
keycloak.security-
constraints[0].securityCollections[0].patterns[0]=/products/*
server.port=8081
我没有从 KeyCloak 控制台或 spring 嵌入式 tomcat 控制台收到任何错误消息。
Check the tomcat console here - no error
谢谢。
我认为你打错了
keycloak.security-constraints[0].authRoles[0]=testuser
,您应该在此处指定角色而不是用户。
如果您按照博文说明进行操作,它应该是:
keycloak.security-constraints[0].authRoles[0]=user
我已经在本周末尝试重播非常有趣的 DEvoxx Sebastien 演讲中的示例。
我在 属性 中指定的角色 "user" 遇到了相同的 403 错误
keycloak.security-constraints[0].authRoles[0]=user
默认 keycloak 配置中不存在 "user" 角色。您必须先在您的领域 (realm/configuration/roles) 中创建它并将其分配给您的用户(realm/users/user/roles 映射)。
关于那个教程,我只是对注销功能有疑问。
有时注销不起作用。
1) 我点击注销,然后点击 /products,然后我没有被重定向到 keycloak 登录页面
2) 如果我点击注销,然后我刷新浏览器页面,然后我点击 /products 我被重定向到 keycloak 登录页面。
似乎是 HttpServletRequest 的注销实现不足以真正注销用户?
`
@GetMapping(path = "/logout")
public String logout(HttpServletRequest request) throws ServletException{
request.logout();
return "/";
}
`
如果有人对 springboot 和 keycloak 之间的行为有解释。谢谢。
在我的例子中,我将 use-resource-role-mappings
设置为 true
,考虑到它会同时提供领域和客户端角色,但事实证明,如果将此选项设置为 true
, 仅 个客户端角色被考虑。
AFAICS,there is no way to use both。
聚会迟到了,但这可能对某人有所帮助。
在我的例子中,我启用了资源授权(因此客户端不是 public)。我必须执行以下操作
在客户端下
授权 -> 设置 -> 策略执行模式
将其设置为“允许”[=10=]
我遇到了同样的问题,问题是我使用的是用破折号分隔的变量,而不是驼峰式大小写。例如,
我有这个(不正确):
keycloak:
auth-server-url: http://localhost:8083/auth
realm: springdemo
resource: Resource_Name
public-client: true
security-constraints[0].auth-roles[0]: user
security-constraints[0].security-collections[0].patterns[0]: /
而不是(正确):
keycloak:
authServerUrl: http://localhost:8083/auth
realm: springdemo
resource: Resource_Name
publicClient: true
securityConstraints[0].authRoles[0]: user
securityConstraints[0].securityCollections[0].patterns[0]: /
我是Keycloak新手,使用的是官方教程项目 https://github.com/sebastienblanc/spring-boot-keycloak-tutorial
为了与 Springboot 应用程序集成,我已经成功设置了 KeyCloak 服务器,spring 引导应用程序也指向我在我在 KeyCloak 上创建的 Realm 上创建的客户端应用程序,在提供正确的凭据后它指向被禁止的页面。
@Controller
class ProductController {
@GetMapping(path = "/products")
public String getProducts(Model model){
model.addAttribute("products", Arrays.asList("iPad","iPhone","iPod"));
return "products";
}
@GetMapping(path = "/logout")
public String logout(HttpServletRequest request) throws ServletException {
request.logout();
return "/";
}
}
Application.properties 文件
keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=springdemo
keycloak.resource=product-app
keycloak.public-client=true
keycloak.security-constraints[0].authRoles[0]=testuser
keycloak.security-
constraints[0].securityCollections[0].patterns[0]=/products/*
server.port=8081
我没有从 KeyCloak 控制台或 spring 嵌入式 tomcat 控制台收到任何错误消息。
Check the tomcat console here - no error
谢谢。
我认为你打错了
keycloak.security-constraints[0].authRoles[0]=testuser
,您应该在此处指定角色而不是用户。
如果您按照博文说明进行操作,它应该是:
keycloak.security-constraints[0].authRoles[0]=user
我已经在本周末尝试重播非常有趣的 DEvoxx Sebastien 演讲中的示例。
我在 属性 中指定的角色 "user" 遇到了相同的 403 错误
keycloak.security-constraints[0].authRoles[0]=user
默认 keycloak 配置中不存在 "user" 角色。您必须先在您的领域 (realm/configuration/roles) 中创建它并将其分配给您的用户(realm/users/user/roles 映射)。
关于那个教程,我只是对注销功能有疑问。
有时注销不起作用。
1) 我点击注销,然后点击 /products,然后我没有被重定向到 keycloak 登录页面
2) 如果我点击注销,然后我刷新浏览器页面,然后我点击 /products 我被重定向到 keycloak 登录页面。
似乎是 HttpServletRequest 的注销实现不足以真正注销用户?
`
@GetMapping(path = "/logout")
public String logout(HttpServletRequest request) throws ServletException{
request.logout();
return "/";
}
`
如果有人对 springboot 和 keycloak 之间的行为有解释。谢谢。
在我的例子中,我将 use-resource-role-mappings
设置为 true
,考虑到它会同时提供领域和客户端角色,但事实证明,如果将此选项设置为 true
, 仅 个客户端角色被考虑。
AFAICS,there is no way to use both。
聚会迟到了,但这可能对某人有所帮助。
在我的例子中,我启用了资源授权(因此客户端不是 public)。我必须执行以下操作
在客户端下 授权 -> 设置 -> 策略执行模式
将其设置为“允许”[=10=]
我遇到了同样的问题,问题是我使用的是用破折号分隔的变量,而不是驼峰式大小写。例如, 我有这个(不正确):
keycloak:
auth-server-url: http://localhost:8083/auth
realm: springdemo
resource: Resource_Name
public-client: true
security-constraints[0].auth-roles[0]: user
security-constraints[0].security-collections[0].patterns[0]: /
而不是(正确):
keycloak:
authServerUrl: http://localhost:8083/auth
realm: springdemo
resource: Resource_Name
publicClient: true
securityConstraints[0].authRoles[0]: user
securityConstraints[0].securityCollections[0].patterns[0]: /