休息,Spring自己的OAuth2服务器+ OAuth2提供商,如Facebook,谷歌,雅虎

时间:2015-04-09 19:51:10

标签: spring spring-security oauth-2.0 spring-social spring-security-oauth2

在Spring Boot应用程序中,我使用Spring Security和Spring OAuth2保护了我的Spring MVC REST端点。我有自己的Authorization \ Resource服务器,所以为了与我们的API通信,客户端(AngularJS)需要从我的API授权服务器获取acessToken。

一切正常但是对于我的API的身份验证/授权,用户需要创建他的帐户并向我们提供他的用户名/密码。

我想简化此过程,并建议用户通过Google / Facebook / Twitter oAuth提供商对我的API进行身份验证。

现在我还不清楚它是如何运作的。例如我的一个想法 - Facebook将发布自己的accessToken并将其传递回我的API。基于此accessToken,我的API将发出自己的accessToken并将其传递回客户端应用程序(AngularJS)。或者我应该直接将Facebook accessToken传递给客户端应用程序吗?

所述案例的正确架构是什么?它应该如何运作?

也许有一些示例演示了基于Spring框架的这种架构?

2 个答案:

答案 0 :(得分:4)

如果要将身份验证委派给外部提供商,可以使用OAuth2ClientAuthenticationProcessingFilter,或Spring Cloud Security中提供的便捷注释和外部配置。示例(来自Spring Cloud Security主页):

Aplication.java:

@SpringBootApplication
@EnableOAuth2Sso
public class Application {
   ...
}

application.yml:

spring:
  oauth2:
    client:
      clientId: bd1c0a783ccdd1c9b9e4
      clientSecret: 1a9030fbca47a5b2c28e92f19050bb77824b5ad1
      accessTokenUri: https://github.com/login/oauth/access_token
      userAuthorizationUri: https://github.com/login/oauth/authorize
      clientAuthenticationScheme: form
    resource:
      userInfoUri: https://api.github.com/user
      preferTokenInfo: false

如果您的应用程序在端口8080上运行(我相信),这适用于github。类似的配置适用于Facebook,云代工,谷歌和其他OAuth2提供商。

答案 1 :(得分:1)

如果是自己的OAuth2或OAuth2 + JWT令牌,请查看以下问题Integrate Spring Security OAuth2 and Spring Social,尤其是@rbarriuso提供的答案。在与任何第三方OAuth2提供商成功授权后,您必须提供自己的SocialAuthenticationSuccessHandler并使用自己的oauth2Token发送重定向。

换句话说,这种与技术无关的解决方案的主要思想是发布您自己的访问令牌,并在成功通过第三方OAuth2提供商进行身份验证后将其提供给用户。