当前位置: 首页 > 面试题库 >

将WebSecurityConfigurerAdapter与Spring OAuth2和user-info-uri结合使用

闻鹤龄
2023-03-14
问题内容

我创建了一个授权服务,如下所示

@SpringBootApplication
@EnableAuthorizationServer
public class AuthorizationApplication {
   ...
}

有了这个application.properties

server.port=9000
security.oauth2.client.client-id=monederobingo
security.oauth2.client.client-secret=monederobingosecret
security.oauth2.client.authorized-grant-types=authorization_code,refresh_token,password,client_credentials
security.oauth2.client.scope=company,client

然后,在一个单独的spring boot项目中,我创建了一个资源服务器。

@SpringBootApplication
@EnableResourceServer
public class App {
   ...
}

有了这个application.properties

server.port=9090
spring.application.name=app
security.oauth2.resource.user-info-uri=http://localhost:9000/user

现在,如果我发送localhost:9090/api带有授权服务检索到的适当令牌的此类请求,一切正常。

但是,我不想在向发送请求时发送此令牌localhost:9090/login

为此,我在资源服务器spring boot应用程序中创建了此类。

@Configuration
public class SpringConfig extends WebSecurityConfigurerAdapter {
    @Override protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/login")
                .permitAll()
                .antMatchers("/api/**")
                .authenticated();
    }

}

现在,我无需发送任何令牌即可向发送请求/login

但是,当/api使用有效令牌向发送请求时,我现在收到以下消息。

{
  "timestamp": 1496027102659,
  "status": 403,
  "error": "Forbidden",
  "message": "Access Denied",
  "path": "/api/v1/points_configuration/314"
}

如何在Spring Security OAuth2中仅为少数几个URL模式配置安全性?


问题答案:

请关注此以获取有关Spring OAuth安全性的更多信息: 使用OAuth保护Spring REST
Api

为了在Spring启动中实现OAuth安全性,您必须通过分别从AuthorizationServerConfigurerAdapter和扩展它们来创建授权和资源服务器ResourceServerConfigurerAdapter

授权服务器

    @Configuration
    @EnableAuthorizationServer
    public class AuthorizationApplication extends AuthorizationServerConfigurerAdapter{

    @Autowired
    private UserDetailsService userDetailsService;
    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints)
                throws Exception {
            endpoints
                    .userDetailsService(userDetailsService)
                    .authenticationManager(this.authenticationManager).tokenStore(tokenStore()).approvalStoreDisabled();
        }

       @Override
        public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
            clients.withClientDetails(mongoClientDetailsService);
            /*inMemory()
                    .withClient(propertyResolver.getProperty(PROP_CLIENTID))
                    .scopes("read", "write")
                    .authorities("ROLE_CLIENT")
                    .authorizedGrantTypes("password", "refresh_token","client_credentials")
                    .secret(propertyResolver.getProperty(PROP_SECRET))
                    .accessTokenValiditySeconds(propertyResolver.getProperty(PROP_TOKEN_VALIDITY_SECONDS, Integer.class, 18000));*/
        }

//Do others stuff
    }

资源服务器

此服务器配置中应提及您要使用OAuth保护的所有网址。它启用了一个Spring
Security过滤器,该过滤器使用传入的OAuth2令牌对请求进行身份验证。虽然大多数WebSecurityConfigurerAdapter扩展类用于基本安全配置,例如添加过滤器,允许使用不安全的url或实现会话策略等。

@Configuration
@EnableResourceServer
public class App extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
    http.requestMatchers().antMatchers("/api/**").and().authorizeRequests()
                .antMatchers("/api/**").authenticated();
}
  //Do others stuff
}


 类似资料:
  • 问题内容: 我们将Robotium与一起用于测试。虽然如此,我们想用Robotium代替Espresso,但是我们仍然有一些疑问,因为我们有一台装有Jenkins的CI机器。 Espresso使用的是Robotium ,而Robotium使用的是第一个,我们希望能够同时使用两个测试框架。可能吗?我们如何在文件中指定呢?我们如何配置我们的詹金斯机器,以针对不同的测试框架执行不同的任务? 我知道Esp

  • 问题内容: 我正在使用Hibernate Validator 4.0.2,Spring 3.0和Hibernate 3.3.2(据我所知,是JPA2之前的版本)作为JPA 1提供程序。 我发现将Validator集成到MVC层很容易(这是可行的),但是看不到如何将验证器自动集成到JPA entityManager(JPA 1)中。 基本上,我有一些实体将保留下来,但它们不是来自Web层,因此尚未经

  • 问题内容: 我是Python的新手,并且开始自学使用PyQT4.7和Python 2.6进行GUI编程(希望如此) 我刚刚从PyQT网站下载了整个PyQT / QT4软件包(包括QTDesigner),但是看起来QTDesigner看起来像个新手,因为每个小部件都看起来很棒(因为您可以看到所有属性/属性/默认设置等)编辑属性很棒,但是PyQT似乎没有设置QTDesigner与PyQT和PyQTs

  • 问题内容: 我试图了解Java java.security.Signature 类的作用。如果我计算一个SHA1消息摘要,然后使用RSA加密该摘要,则得到的结果与要求 Signature 类对同一事物进行签名的结果不同: 结果(例如): 输入数据:这是正在签名的消息 摘要:62b0a9ef15461c82766fb5bdaae9edbe4ac2e067 密码文本:057dc0d2f7f54acc9

  • 问题内容: 我在SO上发现了其他几个有关JavaMail API和通过SMTP服务器发送邮件的问题,但是没有一个使用TLS安全性进行讨论。我正在尝试使用JavaMail通过我的工作SMTP邮件服务器向我发送状态更新,但是它需要TLS,而且我在网上找不到任何有关如何使用JavaMail访问需要TLS加密的SMTP服务器的示例。有人能帮忙吗? 问题答案: 实际上,我们的产品中确实有一些通知代码,如果有

  • 我已经阅读了一些关于SaaS/PaaS/IaaS的信息,我在想: 如果我提供了一个SaaS应用程序,我的客户能否使用PaaS开发和部署他自己的应用程序,PaaS将使用一些API与我的SaaS应用程序交互?还是我对云服务的理解有误?

  • 问题内容: 我有一个带有MySQL的远程数据库,并且将我的应用程序用户的照片存储在数据库中,作为LONGTEXT类型的数据库的一行。 我使用Base64将照片转换为字符串。 我使用JSON和PHP连接到远程数据库,因此,我必须使用Base64,因为据我所知,JSON和PHP需要在参数上发送字符串,而使用Base64可以将照片转换为字符串。 可以,但是非常慢。当我加载100 KB的照片时,会花费很多

  • 问题内容: 我的目标是通过Python将Adblock Plus与Selenium结合使用。我已经能够将其加载到扩展程序中,但是默认情况下,它不包含默认过滤器“ EasyList”。这是我到目前为止的内容: 大部分代码都是从http://selenium- python.readthedocs.org/en/latest/faq.html 剥离的 问题答案: 实际上,默认情况下,Adblock P