我们已经设置了OAuth2授权服务器,因此我需要创建相应的资源服务器(单独的服务器).我们计划使用Spring Security OAuth2项目.他们用于设置资源服务器的文档:
https://github.com/spring-projects/spring-security-oauth/wiki/oAuth2#resource-server-configuration
token-services-ref应该指向令牌处理bean.然而,似乎令牌处理由服务器本身完成,即使它是资源服务器.似乎没有任何远程令牌服务类或与远程服务器相关的任何配置.这与CloudFoundary UAA(https://github.com/cloudfoundry/uaa/blob/master/samples/api/src/main/webapp/WEB-INF/spring-servlet.xml)形成对比,后者具有:
<bean id="tokenServices"
class="org.cloudfoundry.identity.uaa.oauth.RemoteTokenServices">
<property name="checkTokenEndpointUrl" value="${checkTokenEndpointUrl}" />
Run Code Online (Sandbox Code Playgroud)
有没有办法将Spring Security OAuth2用于与单独的OAuth2授权服务器通信的资源服务器?如何设置通信端点?
Spring OAuth2多因素身份验证实现的完整代码已上载到文件共享站点,您可以通过单击此链接下载该站点.下面的说明解释了如何使用该链接在任何计算机上重新创建当前问题.提供500点赏金.
当用户尝试使用前一段中链接的Spring Boot OAuth2应用程序中的双因素身份验证进行身份验证时,将触发错误.当应用程序应该提供第二页时要求用户输入密码来确认用户的身份,该过程中会出现错误.
鉴于null客户端正在触发此错误,问题似乎是如何在Spring Boot OAuth2中连接ClientDetailsService到a Custom OAuth2RequestFactory.
在整个调试日志可以在文件共享网站点击此链接上读取.日志中的完整堆栈跟踪仅包含对应用程序中实际代码的一个引用,该代码行为:
AuthorizationRequest authorizationRequest =
oAuth2RequestFactory.createAuthorizationRequest(paramsFromRequest(request));
Run Code Online (Sandbox Code Playgroud)
调试日志中抛出的错误是:
org.springframework.security.oauth2.provider.NoSuchClientException:
No client with requested id: null
Run Code Online (Sandbox Code Playgroud)
我创建了以下流程图,以说明@James建议实现中的多因素身份验证请求的预期流程:
在上面的流程图中,在用户名和密码视图与GET/secure/two_factor_authenticated步骤之间的某个时刻抛出当前错误.
该OP的解决方案的范围仅限于FIRST PASS,其中1.)穿过/oauth/authorize端点,然后2.)通过端口返回/oauth/authorize端点TwoFactorAuthenticationController.
因此,我们只是想解决NoSuchClientException,同时也表明客户端已成功授权ROLE_TWO_FACTOR_AUTHENTICATED的POST /secure/two_factor_authenticated.鉴于随后的步骤是锅炉板,只要用户以成功完成FIRST PASS的所有工件进入SECOND PASS,流程就可以在SECOND PASS条目中明显中断.只要我们在这里成功解决FIRST PASS,SECOND PASS就可以成为一个单独的问题. CustomOAuth2RequestFactory
这是AuthorizationServerConfigurerAdapter …
spring spring-mvc spring-security spring-boot spring-security-oauth2