Spring Boot - KeyCloak指向403禁止

时间:2017-06-24 17:18:22

标签: java spring-boot keycloak

我是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 enter image description here

谢谢。

6 个答案:

答案 0 :(得分:3)

我认为你有一个错字 keycloak.security-constraints[0].authRoles[0]=testuser,您应该在此处指定角色,而不是用户。 如果您按照博客说明进行操作,则应该是: keycloak.security-constraints[0].authRoles[0]=user

答案 1 :(得分:1)

我遇到了同样的问题,问题是我使用的是由破折号分隔的变量,而不是驼峰式大小写。例如, 我有这个(不正确):

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]: /

答案 2 :(得分:0)

我已经尝试过本周末重播来自非常有趣的DEvoxx Sebastien发言的例子。

我与角色"用户"有同样的403错误在属性中指定 keycloak.security-constraints[0].authRoles[0]=user

"用户"默认的keycloak配置中不存在该角色。您必须先在领域(领域/配置/角色)中创建它并将其分配给您的用户(领域/用户/用户/角色映射)。

答案 3 :(得分:0)

关于该教程,我只是遇到登出功能问题。

有时注销不起作用。

1)我点击退出然后点击/ products,然后我没有被重定向到keycloak登录页面

2)如果我点击退出,那么我刷新浏览器页面,然后点击/ products我被重定向到keycloak登录页面。

它接应来自HttpServletRequest的注销实现不足以真正注销用户?

`

@GetMapping(path = "/logout")
public String logout(HttpServletRequest request) throws ServletException{
        request.logout();
        return "/";
}

`

如果有人对springboot和keycloak之间的行为有解释。谢谢。

答案 4 :(得分:0)

在这里,我将use-resource-role-mappings设置为true,考虑到它将同时提供领域和客户角色,但是事实证明,如果将此选项设置为true,< em>仅客户端角色。

AFAICS,there is no way to use both

答案 5 :(得分:0)

迟到聚会,但这可能会对某人有所帮助。

就我而言,我启用了资源授权(因此客户端不是公开的)。我必须执行以下操作

在客户下 授权->设置->策略强制模式

将其设置为“允许”