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

带有OAuth2和匿名访问的Spring Security性

养枫涟
2023-03-14

我用Spring Security和OAuth2保护了我的Spring REST API,我可以成功地检索令牌并访问我的API。我的应用程序自定义了OAuth2客户端

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.antMatcher("/api1").anonymous().and()
            .authorizeRequests().antMatchers("/ap2**").permitAll();
}

当我添加第二个antmatcher/anonymous时,它就无法工作,而且它也没有真正表达我的意图--例如,我不想对API1GETs进行匿名访问,而是在POSTs上进行身份验证(使用@preauthorize很容易做到)。

如何使OAuth2身份验证可选?

共有1个答案

宋宏儒
2023-03-14

我删除了@enableWebSecurity并使用了ResourceServerConfigurerAdapter,如下所示:

@Configuration
@EnableResourceServer
protected static class ResourceServer extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                    .antMatchers(HttpMethod.GET, "/api/api1", "/api/api2").permitAll()
                .and().authorizeRequests()
                    .anyRequest().authenticated();
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("my-resource-id");
    }
}

/api/api1现在可以使用或不使用身份验证调用。

 类似资料:
  • 我需要匿名公开执行器“health”endpoint,这意味着对该endpoint的请求不会通过SiteMinder,因此,HTTP请求头中不会出现SM_USER头。 我面临的问题是,无论我如何尝试配置“health”endpoint,框架都会抛出,因为当请求没有通过SiteMinder时,预期的头(“sm_user”)不存在。 这是我最初的安全配置: 我试过的事情: 为匿名访问而不是Permit

  • 我已经翻遍了谷歌关于GoogleDrive SDK和Drive API的所有文档,但我无法找到是否有一种方法可以在不使用oauth2的情况下连接到特定的GoogleDrive。 这与Mashery以及Twilio所允许的许多API的功能相似。只有API密钥,然后您可以访问。 我真的只需要知道这是否可能,所以我要么继续追求,要么离开它,尝试一些不同的东西。

  • 这是我的安全配置 问题是,当我从/导航到受保护的URL时,不会调用CustomRequestCache,因此在登录后,SavedRequestStawareAuthenticationSuccessHandler不会重定向到请求的页面。 我认为这是因为permitAll创建了一个匿名用户。 我如何配置Spring Security才能使SavedRequestAwareAuthentication

  • 我试图用Spring的授权授予流来保护我的REST Api。 我正试图使用这个auth访问/api/user,它来自用户登录后的auth服务器令牌请求... 怎么了?

  • 我需要一些关于如何保护或加强匿名REST API访问的建议。API将由基于浏览器的Web应用程序访问。这个Web应用程序不需要用户身份验证,因此我认为OAuth令牌不是一个选项。其目的是保护这些API不被未知的应用程序/源使用。

  • 问题内容: 除了使用反射来访问匿名内部类的成员之外,还有其他方法吗? 问题答案: 匿名内部类具有类型,但没有名称。 您可以访问未由命名超类型定义的字段。但是,一旦分配给命名类型变量,该接口就会丢失。 显然,您可以从内部类本身内部访问字段。添加代码的一种方法是通过实例初始化程序: 匿名内部类表达式返回的值具有匿名类型,因此您有机会在类本身之外使用它: 您也可以通过声明类似于以下内容的方法传递它: