我正在使用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。
有人可以指点一些示例或集成测试,我可以看到类似的内容吗?
在这里,我找到了很棒的教程Spring Boot and OAuth2,其中包含如何添加本地用户数据库部分的提示。试图从Google重定向到授权重定向URI http://localhost:10001/user
端点,该端点定义为.antMatchers("/user").authenticated()
并获取拒绝访问
o.s.s.w.a.i.FilterSecurityInterceptor - Secure object: FilterInvocation: URL: /user?state=Wj7RVk&code=4/wa2AFtJr0K3cKTxDAYo8rTOu2p41km5o3YCPnimx4wU; Attributes: [authenticated]
o.s.s.w.a.i.FilterSecurityInterceptor - Previously Authenticated: org.springframework.security.authentication.AnonymousAuthenticationToken@6fa8940c: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffde5d4: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: 5888363FA9E329992073DCE4B21E8B5C; Granted Authorities: ROLE_ANONYMOUS
o.s.s.access.vote.AffirmativeBased - Voter: org.springframework.security.web.access.expression.WebExpressionVoter@29802df4, returned: -1
o.s.s.w.a.ExceptionTranslationFilter - Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied
非常感谢您的帮助!
答案 0 :(得分:0)
尝试从Google重定向到授权重定向URI http://localhost:10001/user
o.s.s.w.a.i.FilterSecurityInterceptor - 安全对象: FilterInvocation:URL: ?/用户状态= Wj7RVk&安培;代码= 4 / wa2AFtJr0K3cKTxDAYo8rTOu2p41km5o3YCPnimx4wU; 属性:[已验证]
看起来你是以错误的方式做到这一点,你不应该使用/user
和code
参数转到state
!流程是:
localhost:8080/login/facebook
localhost:8080/login/facebook
您的州和代码参数:
localhost:8080/login/facebook?state=Wj7RVk&code=4/wa2AFtJr0K3cKTxDAYo8rTOu2p41km5o3YCPnimx4wU
AuthenticationSuccessHandler
进行重定向
你根据它的具体实际(通常它是
SavedRequestAwareAuthenticationSuccessHandler
)如果这些步骤成功完成,您可以转到/user
端点以获取一些用户信息。