当前位置: 首页 > 知识库问答 >
问题:

带Spring Boot的Keycloak-如何应用资源范围

汲丰茂
2023-03-14
policy-enforcer-config:
  enforcement-mode: ENFORCING
  paths[0]:
    name: all
    path: /*
  paths[1]:
    name: test post
  path: /my/url
    methods[0]:
      method: GET
      scopes[0]: view
    methods[1]:
      method: POST
      scopes[0]: edit

你能给我提供一个资源范围使用或建议的例子吗?

共有1个答案

丁勇
2023-03-14

可能有多个问题,但首先,检查您的SecurityConfig。

这就是我们所拥有的:

@Configuration
@EnableWebSecurity
@KeycloakConfiguration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableConfigurationProperties(KeycloakSpringBootProperties.class)
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    bla-bla..

@Override
public void configure(WebSecurity web) throws Exception {
    web
            .ignoring()
            .antMatchers(HttpMethod.POST, "/auth/**")
            .antMatchers(HttpMethod.OPTIONS,"/**")
            // allow anonymous resource requests
            .and()
            .ignoring()
            .antMatchers(
                    HttpMethod.GET,
                    "/",
                    "/*.html",
                    "/favicon.ico",
                    "/**/*.html",
                    "/**/*.css",
                    "/**/*.js",
                    "/actuator/**"

            )
    ;
}


    @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            // we don't need CSRF because our token is invulnerable
            .csrf().disable()

            .exceptionHandling()
            .defaultAuthenticationEntryPointFor(
                    getRestAuthenticationEntryPoint(),
                    new AntPathRequestMatcher("/**")
            )
            .authenticationEntryPoint(unauthorizedHandler).and()

            // don't create session
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()

            .authorizeRequests()

            // system state endpoint
            .antMatchers("/ping").permitAll()

            .antMatchers(HttpMethod.GET, "/whatever/you/need/to/open/to/public/one", "/whatever/you/need/to/open/to/public/two").permitAll()


            // User authentication actions
            .antMatchers("/auth/**").permitAll()
            .antMatchers("/**/*.css").permitAll()

            .anyRequest().authenticated()
    ;

    http
            .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class)
    ;

    // disable page caching
    http
            .headers()
            .frameOptions().sameOrigin()
            .cacheControl();

}

如果您想用role限制REST APIendpoint,请为控制器方法添加@preauthorize(“hasrole('your.role.from.keycloak')”)

 类似资料:
  • 我想使用KeyCloak的authorizaion系统创建一个相当简单的基于角色的访问控制系统。Keycloak正在替换的系统允许我们创建一个“用户”,该用户是一个或多个“组”的成员。在这个遗留系统中,用户可以通过组成员资格(其中组被分配权限)或直接向用户授予权限来访问大约250个“功能”中的每一个。 我想将遗留系统映射到keycloak授权。 谢谢, 标记

  • 我正在Openshift环境中部署一个Spring boot Web应用程序。由于我们在同一个引导项目中使用JSP和CSS等Web组件,因此我们将应用程序部署为Openshift环境中的WAR文件。我还添加了tomcat-embed-jasper来解析这些Web组件并执行WAR文件。 但问题是,当我在Openshift环境中部署它时,应用程序消耗了超过1GB的资源。有什么方法可以减少应用程序的内存

  • 我有一个SpringBoot项目(maven/java8)。 我想通过Maven配置文件(dev.properties|prod.properties)过滤src/main/Resources/application.properties中的一些自定义变量 Maven命令: 应用属性: 开发属性: prod.properties: pom.xml:

  • 我正在开发一个JavaEE6应用程序,其部署目标是GlassFish V3.1。为了隔离应用程序的实例(因为我们可能部署了多个用于测试和生产的实例,或者多个QA实例),我希望将应用程序范围的资源用于应用程序中的所有资源: JDBC连接 JMS资源 自定义资源 不幸的是,由于JDBC连接细节不是静态的,所以我需要支持以下顺序: 部署战争 在部署过程中,检测空的JDBC URL/用户/密码,并且不执行

  • 我最近在使用作为Spring Boot applications(v2.2)开发的微服务,在我的公司,我们使用Keycloak作为授权服务器。我们之所以选择它,是因为我们需要复杂的策略、角色和组,我们还需要用户托管授权(UMA)来在用户之间共享资源。 有没有一种方法可以在控制器级别使用某种注释?类似于下面的伪代码:

  • 我有以下场景:一个客户端应用程序试图访问API网关后面的APIendpoint。我想验证(使用id和秘密)应用程序,如果它是应用程序A允许它访问endpoint/信用,如果它是应用程序B允许它访问endpoint/借方。 我假设API网关应该验证一个调用是否应该被拒绝。你能告诉我我的工作流应该是什么样子,我应该使用什么Keycloak功能吗?