我创建了一个授权服务,如下所示
@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