【发布时间】:2017-03-15 19:02:25
【问题描述】:
我正在使用 spring-security-oauth2-provider:3.0.0-RC2 和 Grails 3.2.1。所有资源端点都以/api 开头,使用
"/api/$controller/$action?/$id?(.$format)?" {
constraints {
}
}
这是过滤器链图(与文档中给出的相同):
String tokenFilters = "JOINED_FILTERS,-oauth2ProviderFilter,-securityContextPersistenceFilter,-logoutFilter,-authenticationProcessingFilter,-rememberMeAuthenticationFilter,-exceptionTranslationFilter"
String securedResourcesFilter = "JOINED_FILTERS,-securityContextPersistenceFilter,-logoutFilter,-authenticationProcessingFilter,-rememberMeAuthenticationFilter,-oauth2BasicAuthenticationFilter,-exceptionTranslationFilter"
String otherFilters = "JOINED_FILTERS,-statelessSecurityContextPersistenceFilter,-oauth2ProviderFilter,-clientCredentialsTokenEndpointFilter,-oauth2BasicAuthenticationFilter,-oauth2ExceptionTranslationFilter"
grails.plugin.springsecurity.filterChain.chainMap = [
[pattern: "/api/oauth/token", filters: tokenFilters],
[pattern: "/api/**", filters: securedResourcesFilter],
[pattern: "/**", filters: otherFilters]
]
我正在使用密码授予身份验证,只要令牌在浏览器的本地存储中可用,就可以通过传递 Authorization 标头一切正常。
我将不记名令牌存储在浏览器的本地存储中。问题是当令牌过期并且在浏览器的本地存储中仍然可用时。其中一项操作被标记为@Secured(["permitAll"]),因此当我点击该操作时(并且还传递了过期的Authorization 标头),由于令牌已过期,请求被401 拒绝。
这是设计使然,即使端点或控制器/动作设置为permitAll,spring security 仍会检查访问令牌的有效性(如果可用)?
【问题讨论】:
标签: spring grails spring-security spring-security-oauth2