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

ale*_*oid 11 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框架的这种架构?

Dav*_*yer 4

如果您想将身份验证委托给外部提供者,您可以使用Spring Cloud SecurityOAuth2ClientAuthenticationProcessingFilter中提供的 、 或方便的注释和外部配置。示例(来自 Spring Cloud Security 主页):

应用程序.java:

@SpringBootApplication
@EnableOAuth2Sso
public class Application {
   ...
}
Run Code Online (Sandbox Code Playgroud)

应用程序.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
Run Code Online (Sandbox Code Playgroud)

如果你的应用程序在端口 8080 上运行(我相信),那么这适用于 github。类似的配置适用于 facebook、cloud foundry、google 和其他 OAuth2 提供商。

  • 谢谢,我的意思是我已经在这个应用程序中拥有自己的 OAuth2 服务器(这个 OAuth2 服务器是这个应用程序的一部分)。除了这种身份验证方法之外,我还想添加外部 oauth2 提供程序。那么,在这种情况下它会起作用吗? (3认同)
  • 有点奇怪!过去几周我一直在谷歌上搜索,似乎互联网上没有人能够做到这一点!我搜索了几乎所有其他平台 Rails、Play、asp.net 都没有运气:( (2认同)