【发布时间】:2018-05-16 00:54:33
【问题描述】:
我有一种情况,我在主端点 (/**) 上提供基本应用程序。在提供任何其他资源之前,我使用 spring security 对用户进行身份验证。身份验证通过登录表单完成。
但具体来说,端点 (/lti/**) 正在不同的 Http 部分中使用。在那里,Spring 安全性使用 OAuth 处理身份验证。
在 /lti/** 端点上进行身份验证后,用户应该将我的整个应用程序加载到 iFrame 中。这意味着访问受第一个 Http 部分保护的所有资源。
现在的问题是,即使用户使用 OAuth 凭据进行身份验证以从 /lti/** 加载应用程序,并且我设置了所有适当的用户角色,但当应用程序加载到 iFrame 并尝试访问任何资源时,它按照第一个 Http 部分的指示重定向到登录屏幕(如果有帮助,后续调用将通过 AJAX,但您可以在开发工具中看到响应)。
根据我目前的研究,安全上下文不会在不同的入口点之间共享。实例化了不同的防火墙,因此重新启动了安全上下文本身。
这是我的一些安全上下文:
<security:http pattern="/lti/**" use-expressions="true" entry-point-ref="oAuthProcessingFilterEntryPoint">
<security:headers>
<security:frame-options disabled="true"/>
</security:headers>
<security:intercept-url pattern="/**" access="hasRole('ROLE_OAUTH')"/>
<!-- Filter -->
<security:custom-filter ref="oAuthProcessingFilter" before="ANONYMOUS_FILTER"/>
<!-- Disable CSRF -->
<security:csrf disabled="true"/>
</security:http>
<security:http>
<security:intercept-url ... />
....
<security:form-login
authentication-success-handler-ref="authenticationSuccessHandler"
login-page=............"/>
<security:logout ................./>
<security:session-management invalid-session-url="............." session-authentication-error-url="................">
</security:session-management>
<!-- Enable csrf protection -->
<security:csrf/>
</security:http>
任何可行的方法或有任何想法我可以如何解决这种情况?
【问题讨论】: