Spring mvc Spring Boot OAuth2-使用本地用户数据库与Facebook进行身份验证

Spring mvc Spring Boot OAuth2-使用本地用户数据库与Facebook进行身份验证,spring-mvc,spring-security,spring-security-oauth2,Spring Mvc,Spring Security,Spring Security Oauth2,我正在使用Spring Boot、Spring MVC和Spring-security-oauth2创建一个网站,并且我正在尝试根据Google、Facebook、GitHub对本地存储的用户进行身份验证。。。OAuth2服务。我也有他们的标准用户名密码 我的想法是,从第一次成功登录oauth开始,将每个用户的[OAuth2_provider_type,OAuth2_subjectId]对存储到本地数据库中,然后在用户再次通过Google(或FB…)进行身份验证时,使用这对来查找正确的用户。我已

我正在使用Spring Boot、Spring MVC和Spring-security-oauth2创建一个网站,并且我正在尝试根据Google、Facebook、GitHub对本地存储的用户进行身份验证。。。OAuth2服务。我也有他们的标准用户名密码

我的想法是,从第一次成功登录oauth开始,将每个用户的[OAuth2_provider_type,OAuth2_subjectId]对存储到本地数据库中,然后在用户再次通过Google(或FB…)进行身份验证时,使用这对来查找正确的用户。我已经正确地通过了Google/Facebook的身份验证,但我不知道如何将本地存储用户连接到Spring OAuth2 Security并将他们连接到SecurityContext

有人能给我举个例子或集成测试,我能看到类似的东西吗

在这里,我找到了一个很棒的教程,在如何添加本地用户数据库一节中有一些提示。试图从Google重定向到授权重定向URI
http://localhost:10001/user
端点,其定义类似于
.antMatchers(“/user”).authenticated()
并拒绝访问

o.s.s.w.a.i.FilterSecurityInterceptor-安全对象:过滤器职业:URL:/user?state=Wj7RVk&code=4/WA2FTJR0K3CktxDayo8RTOU2P41KM5O3YCPNIMX4WU;属性:[已验证]
o、 s.s.w.a.i.FilterSecurityInterceptor-以前经过身份验证的:org.springframework.security.authentication。AnonymousAuthenticationToken@6fa8940c:委托人:匿名用户;凭据:[受保护];认证:正确;详细信息:org.springframework.security.web.authentication。WebAuthenticationDetails@fffde5d4:RemoteIP地址:0:0:0:0:0:0:0:0:1;会话ID:5888363FA9E32999073DCE4B21E8B5C;授予的权限:角色\u匿名
o、 投票人:org.springframework.security.web.access.expression。WebExpressionVoter@29802df4,返回:-1
o、 s.s.w.a.例外TranslationFilter-访问被拒绝(用户是匿名的);重定向到身份验证入口点
org.springframework.security.access.AccessDeniedException:访问被拒绝

非常感谢您的帮助

试图从Google重定向到授权重定向URI

o、 s.s.w.a.i.FilterSecurityInterceptor-安全对象: 筛选器职业:URL: /用户?状态=Wj7RVk&代码=4/WA2FTJR0K3CKTXDAYO8RTOU2P41KM5O3YCPNIMX4WU; 属性:[已验证]

看起来您的操作方式不对,您不应该使用
code
state
参数转到
/user
!流程是:

  • 为url注册sso端点,如
    localhost:8080/login/facebook
  • 单击指向端点的链接后,您将获得 已重定向到facebook授权页面
  • 一旦获得授权,您应该被重定向回
    localhost:8080/login/facebook
    带有您的状态和代码参数:
    localhost:8080/login/facebook?state=Wj7RVk&code=4/wa2aftjr0kcktxdayo8rtou2pp4km5o3ycpnimx4wu
  • 当sso过滤器获取代码时,再次转到facebook 交换访问\u代码以访问\u令牌并将令牌放入会话
  • 在流程结束时,调用
    AuthenticationSuccessHandler
    重定向 你可以根据它的具体实施(通常是
    SavedRequestAwareAuthenticationSuccessHandler
  • 如果这些步骤已成功完成,您可以转到
    /user
    端点以获取一些用户信息