今天我从具有独立java配置依赖性的Spring Security 3.1.4升级到包含java config的新3.2.0版本.CSRF默认打开,我知道我可以在我的重写配置方法中使用"http.csrf().disable()"禁用它.但是假设我不想禁用它,但我需要在登录页面上使用CSRF令牌,其中没有使用JSP标记库或Spring标记库.
我的登录页面纯粹是HTML,我在使用Yeoman生成的Backbone应用程序中使用.我如何在表单中或作为标题包含HttpSession中包含的CSRF令牌,这样我就不会得到"未找到预期的CSRF令牌.您的会话是否已过期?" 例外?
下面给出了快速重现问题的完整代码和说明.
HttpSession成为null以后的自定义实现DefaultOAuth2RequestFactory替换当前AuthorizationRequest与保存AuthorizationRequest. 这将导致后续请求失败来/oauth/token,因为CsrfFilter在之前的春季安全过滤器链/oauth/token端点无法找到一个session Csrf token在null session与比较request的Csrf token.
以下流程图说明了步骤14和步骤15以某种方式 - null通知HttpSession.(或者可能不匹配a JSESSIONID.)在步骤14SYSO开始时的A 表明确实存在确实包含正确的.然而,不知何故,当步骤15触发从URL 处的客户端返回到端点的呼叫时,已经变为. CustomOAuth2RequestFactory.javaHttpSessionCsrfTokenHttpSessionnulllocalhost:8080/loginlocalhost:9999/oauth/token
断点被添加到HttpSessionSecurityContextRepository下面的调试日志中提到的每一行.(它位于在Maven Dependencies所述的夹authservereclipse项目.)这些断点确认的HttpSession是null,当向最终请求/oauth/token在下面的流程图制备.(左下角流程图) 的null …
我正在寻找有关如何使用spring security OAuth2实现双因素身份验证(2FA)的想法.要求是用户仅需要对具有敏感信息的特定应用程序进行双因素身份验证.这些webapps有自己的客户端ID.
我想到的一个想法是"误用"范围审批页面以强制用户输入2FA代码/ PIN(或其他).
示例流程如下所示:
不使用和使用2FA访问应用程序
使用2FA直接访问应用
你有其他想法如何计算这个吗?
在以前版本的OAuth2中,可以通过将自定义标记granter添加到<authorization-server>元素中的xml配置来添加它.
我想知道如何使用AuthorizationServerConfigurerAdapter使用Java Config扩展授权服务器,而不会丢失包含隐式,客户端凭据,刷新令牌和授权代码授权类型的默认配置.
首次尝试使用@Component创建TokenGranter:
@Component("customTokenGranter")
public class CustomTokenGranter {
//implementation
}
Run Code Online (Sandbox Code Playgroud)
这导致依赖性解决异常,因为构造Granter所需的tokenServices无法自动装配.
第二次尝试使用configure方法
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception
{
endpoints
.tokenGranter(new CustomTokenGranter(endpoints.getTokenServices(),
endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory()));
}
Run Code Online (Sandbox Code Playgroud)
使用此选项,将不会注册默认授权类型.
我也尝试了低阶的第二种配置,但没有成功.我还可以做些什么来添加自定义授权类型?