Rest,Spring拥有OAuth2服务器+OAuth2提供商,如Facebook、谷歌、雅虎



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

一切都很好,但为了在我的API上进行身份验证/授权,用户需要创建他的帐户并向我们提供他的用户名/密码。

我想简化这个过程,并建议用户通过谷歌/脸书/推特oAuth提供商在我的API上进行身份验证。

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

所描述案例的正确体系结构是什么?它应该如何工作?

也许有一些例子可以演示这种基于Spring框架的体系结构?

如果您想将身份验证委托给外部提供商,可以使用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提供商。

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

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

最新更新