3

我正在研究 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的源码,需要参考

  1. 一个 OAuth2RestOperations(rest 模板),它引用一个 Oauth 服务器资源(关于 google 的信息)
  2. ResourceServerTokenServices(来自 Spring-security-oauth 库提供程序包)。

现在我很困惑。Spring-security-oauth 分为两部分:客户端和提供者。

既然我只是设置了一个 Oauth 客户端,为什么我需要从 Oauth 提供程序包中引用一个类?

另外,我应该如何设置 ResourceServerTokenServices?现在我正在尝试使用默认实现。因为 DefaultTokenServices 再次需要参考

  1. 代币商店
  2. 客户详情服务
  3. 代币增强器

到目前为止,我尝试了所有默认实现:

  • TokenStore: InMemoryTokenStore
  • ClientDetailsS​​ervice: InMemoryClientDetailsS​​ervice
  • TokenEnhancer: TokenEnhancerChain

它似乎不起作用......

谢谢!

4

2 回答 2

2

我想我可能会写点什么。但是您使用的版本非常旧,Spring Security OAuth2 的最新版本非常易于使用并且应用广泛 - 许多文档。让我们进行一些搜索:D

http://jhasaket.blogspot.com/2014/09/securing-spring-mvc-application-using.html

于 2015-01-22T09:52:45.680 回答
0

查看 Spring “Social Client” 教程,

https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_github

该教程包含 Facebook 和 Gist 的信息。我无法弄清楚的一个部分 - userInfo URL - 我最终不是在 Google 上发现的,而是在此处显示的 .YML 文件数据中发现的:

http://www.techforumist.com/google-oauth2-login-in-spring-boot-and-angularjs/

在本地复制(本着提供不仅仅是 URL 的 SO 实践的精神:-)):

oauth2:
    client:
      clientId: <Client ID from google developer console>
      clientSecret: <Client Secret from google developer console>
      accessTokenUri: https://www.googleapis.com/oauth2/v4/token
      userAuthorizationUri: https://accounts.google.com/o/oauth2/v2/auth
      clientAuthenticationScheme: form
      scope:
        - openid
        - email
        - profile
    resource:
      userInfoUri: https://www.googleapis.com/oauth2/v3/userinfo
      preferTokenInfo: true

希望这对您有所帮助(我花了一段时间才找到所有这些)!

PS 我有一个应用程序使用 Spring Boot OAuth2 安全性成功地针对 Google 进行身份验证 - 不要放弃希望!我目前缺乏的是一种方法来解压缩我返回的数据以确定用户的 Google 电子邮件地址以进行白名单 - 请参阅下面的 SO 链接:

使用 Spring Boot OAuth2 针对 Google 进行身份验证时如何将 google 用户电子邮件发送到白名单用户

于 2017-05-23T15:39:04.227 回答