繁体   English   中英

Spring Boot - KeyCloak 指向 403 forbidden

[英]Spring Boot - KeyCloak directed to 403 forbidden

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

为了与 Springboot 应用程序集成,我已经成功设置了 KeyCloak 服务器,并且 spring 引导应用程序也指向我在 Realm 上创建的客户端应用程序,我在 KeyCloak 上创建了它,在提供正确的凭据后它指向禁止页面。

@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 控制台收到任何错误消息。

在此处检查 tomcat 控制台 - 没有错误在此处输入图像描述

谢谢你。

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

在这里,我将use-resource-role-mappingstrue ,考虑到它将提供领域和客户端角色,但事实证明,如果将此选项设置为true则只考虑客户端角色。

AFAICS, 无法同时使用两者

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

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

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

我在属性keycloak.security-constraints[0].authRoles[0]=user指定的角色“user”也有同样的 403 错误

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

关于那个教程,我只是有注销功能的问题。

有时注销不起作用。

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

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

看来 HttpServletRequest 的注销实现不足以真正注销用户?

`

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

`

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

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

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

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

将其设置为“许可”

在我的例子中,我必须在客户端配置中关闭客户端身份验证和授权(两者)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM