我正在研究 spring-security-oauth2-1.0.3.RELEASE,试图设置一个 oauth 客户端来让用户通过 google 进行身份验证。
我在这上面花了一段时间,但仍然没有找到很多解释得很清楚的好文章。
我正在做的是将 OAuth2ClientAuthenticationProcessingFilter 放入过滤器链中,如下所示:
<http xmlns="http://www.springframework.org/schema/security"
use-expressions="true" pattern="/oauth.html" auto-config="true">
<sec:intercept-url pattern="/**" access="isFullyAuthenticated()" />
<custom-filter ref="oauth2ClientFilter" position="CAS_FILTER" />
<sec:custom-filter ref="googleAuthFilter" after="CAS_FILTER" />
</http>
自定义过滤器: googleAuthFilter 用于保护我的 URL。
阅读OAuth2ClientAuthenticationProcessingFilter的源码,需要参考
- 一个 OAuth2RestOperations(rest 模板),它引用一个 Oauth 服务器资源(关于 google 的信息)
- ResourceServerTokenServices(来自 Spring-security-oauth 库提供程序包)。
现在我很困惑。Spring-security-oauth 分为两部分:客户端和提供者。
既然我只是设置了一个 Oauth 客户端,为什么我需要从 Oauth 提供程序包中引用一个类?
另外,我应该如何设置 ResourceServerTokenServices?现在我正在尝试使用默认实现。因为 DefaultTokenServices 再次需要参考
- 代币商店
- 客户详情服务
- 代币增强器
到目前为止,我尝试了所有默认实现:
- TokenStore: InMemoryTokenStore
- ClientDetailsService: InMemoryClientDetailsService
- TokenEnhancer: TokenEnhancerChain
它似乎不起作用......
谢谢!