sow*_*dri 17 spring spring-security oauth-2.0 spring-security-oauth2
我正在尝试使用spring security oauth设置资源服务器以使用单独的授权服务器.我正在使用RemoteTokenServices
哪个需要/check_token
端点.
我可以看到/oauth/check_token
端点在@EnableAuthorizationServer
使用时默认启用.但是,默认情况下无法访问端点.
是否应手动添加以下条目以将此端点列入白名单?
http.authorizeRequests().antMatchers("/oauth/check_token").permitAll();
Run Code Online (Sandbox Code Playgroud)
这将使所有人都可以访问此端点,这是否是所需的行为?或者我错过了什么.
提前致谢,
Pra*_*hah 20
你必须
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception
{
oauthServer.checkTokenAccess("permitAll()");
}
Run Code Online (Sandbox Code Playgroud)
有关这方面的更多信息::
只是为了澄清几点,并向Pratik Shah(以及相关主题中的Alex)提供的答案添加更多信息:
1- configure
通过创建一个扩展类来覆盖上述方法AuthorizationServerConfigurerAdapter
:
@EnableAuthorizationServer
@Configuration
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
@Override
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient("ger-client-id")
.secret("ger-secret")
.authorizedGrantTypes("password")
.scopes("read", "write");
}
}
Run Code Online (Sandbox Code Playgroud)
2-我建议阅读本Spring指南,以解释当我们包含@EnableAuthorizationServer
注解(包括AuthorizationServerConfigurer
Bean)时Spring Boot进行的自动配置。如果创建一个配置Bean AuthorizationServerConfigurerAdapter
像上面那样扩展,那么整个自动配置将被禁用。
3-如果自动配置非常适合您,并且您只想操纵对/oauth/check_token
端点的访问,则仍然可以这样做,而无需创建AuthorizationServerConfigurer
Bean(因此不必以编程方式配置所有内容)。
您必须将security.oauth2.authorization.check-token-access
属性添加到application.properties
文件中,例如:
security.oauth2.client.client-id=ger-client-id
security.oauth2.client.client-secret=ger-secret
security.oauth2.client.scope=read,write
security.oauth2.authorization.check-token-access=permitAll()
Run Code Online (Sandbox Code Playgroud)
当然,isAuthenticated()
如果您愿意,可以给它一个值。
您可以将日志级别设置为DEBUG,以检查是否按预期配置了所有内容:
16:16:42.763 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll()', for Ant [pattern='/oauth/check_token']
Run Code Online (Sandbox Code Playgroud)
关于这些属性的文档很少,但是您可以从此自动配置类中找出它们。
最后一件事值得一提,尽管它似乎在最新的Spring版本中已解决,但我只是在spring-security-oauth项目中提交了一个问题。如果在请求中添加斜杠,则似乎默认启用了token_check功能:
$ curl localhost:8080/oauth/check_token/?token=fc9e4ad4-d6e8-4f57-b67e-c0285dcdeb58
{"scope":["read","write"],"active":true,"exp":1544940147,"authorities":["ROLE_USER"],"client_id":"ger-client-id"}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24433 次 |
最近记录: |