【问题标题】:Spring Boot - KeyCloak directed to 403 forbiddenSpring Boot - KeyCloak 指向 403 禁止
【发布时间】:2017-11-28 01:42:18
【问题描述】:

我是 Keycloak 的新手,我正在使用官方教程项目 https://github.com/sebastienblanc/spring-boot-keycloak-tutorial

为了与 Springboot 应用程序集成,我已经成功设置了 KeyCloak 服务器,并且 Spring Boot 应用程序还指向我在我在 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

谢谢。

【问题讨论】:

    标签: java spring-boot keycloak


    【解决方案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】:

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

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

      在客户端下 授权 -> 设置 -> 策略执行模式

      将其设置为“允许”

      【讨论】:

        【解决方案3】:

        在我的例子中,我将use-resource-role-mappings 设置为true,考虑到它将提供领域和客户端角色,但事实证明,如果此选项设置为true 考虑客户角色。

        AFAICS,there is no way to use both

        【讨论】:

          【解决方案4】:

          关于那个教程,我只是在注销功能方面遇到了问题。

          有时注销不起作用。

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

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

          从 HttpServletRequest 的注销实现似乎不足以真正注销用户?

          `

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

          `

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

          【讨论】:

          • 嗨,我也有同样的问题,好几次了。
          【解决方案5】:

          我已尝试在本周末重播非常有趣的 DEvoxx Sebastien 演讲中的示例。

          我在属性中指定的角色“用户”遇到了同样的 403 错误 keycloak.security-constraints[0].authRoles[0]=user

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

            • 我也有一个 403,因为我的角色是大写的,而实际上它应该小写为 =user 以匹配 Keycloak 服务器中指定的角色。
            猜你喜欢
            • 2020-02-11
            • 2017-12-01
            • 2018-11-01
            • 2021-09-04
            • 2021-03-05
            • 1970-01-01
            • 2021-12-31
            • 2018-05-31
            • 2016-03-06
            相关资源
            最近更新 更多