SAMLRequest 403 在 css 链接标签中拒绝访问

Posted

技术标签:

【中文标题】SAMLRequest 403 在 css 链接标签中拒绝访问【英文标题】:SAMLRequest 403 Access denied in css link tag 【发布时间】:2016-12-02 02:48:04 【问题描述】:

我在 Spring MVC 应用程序的 jsp 页面中添加链接标记时遇到问题。

这个jsp页面用于在发出SAMLRequest后处理“拒绝访问”。但是我的链接标签如何在 jsp 中获取 SAMLRequest 而不是 CSS 文本。有人可以帮我解决这个问题吗?

我的 JSP

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <link rel="stylesheet" href="css/temp.css" type="text/css">
</head>
<body>
    <div class="forbidden">
        <div class="repeat-image">
            <div class="main-image image403">
                <div class="text-block">
                    <p class="status">403</p>
                    <p class="title">Access Denied</p>
                    <p class="message">You currently do not have permission to access this page.  Want access?</p>

                    <div class="instructions">
                        Instructions to request via Self Service UAA<br />
                        <ul>
                            <li>In SSUAA --> Search for "Access"</li>
                            <li>Click "Next" to confirm requests</li>
                        </ul>
                        You will receive an email confirmation and status updates for your request
                    </div>
                    <div class="message">
                        Go ahead and request it <a href="url" target="_blank">here &raquo; </a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

Firebug HTML 标签:

<html>
<head>
<link type="text/css" href="css/temp.css" rel="stylesheet">
<HTML><HEAD><TITLE>HTTP Post Binding (Request)</TITLE></HEAD><BODY Onload="document.forms[0].submit()"><FORM METHOD="POST" ACTION="/idp/SSO.saml2"><INPUT TYPE="HIDDEN" NAME="SAMLRequest" VALUE="PHNhbWxwOkF1dGhuUmVxdWVzdCB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnBm5hbWVpZC1mb3JtYXQ6dHJhbnNpZW50IiBBbGxvd0NyZWF0ZT0idHJ1ZSIvPjwvc2FtbHA6QXV0aG5SZXF1ZXN0Pg=="/><INPUT TYPE="HIDDEN" NAME="RelayState" VALUE="https://localhost:8080/"/></FORM></BODY></HTML>
</link>
</head>
<body>
</html>

目录结构:

安全部分:

<security:http pattern="/css/**" security="none" />
<security:http pattern="/images/**" security="none" />
<security:http pattern="/403" security="none" /> 

<security:http entry-point-ref="entryPoint"
    use-expressions="true">
    <security:intercept-url pattern="/**"
        access="isAuthenticated()" />
    <security:custom-filter position="CAS_FILTER"
        ref="authenticationFilter" />
    <security:logout logout-url="/signout"
        logout-success-url="/" />
    <security:csrf disabled="true"/>
</security:http>

<bean id="authenticationFilter"
    class="com.espn.ese.ais.vod.ams.security.picketlink.PicketLinkAuthenticationFilter"
    lazy-init="true">
    <constructor-arg value="$picketlink.filter.processes.url" />
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="serviceUrl" value="$picketlink.service.url" />
    <property name="authenticationFailureHandler">
        <bean class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
            <constructor-arg value="/403" />
        </bean>
    </property>
</bean>
<security:authentication-manager alias="authenticationManager">
    <security:authentication-provider
        ref="authenticationProvider" />
</security:authentication-manager>

<bean id="authenticationProvider"
    class="com.espn.ese.ais.vod.ams.security.picketlink.PicketLinkAuthenticationProvider"
    lazy-init="true">
    <property name="authenticationUserDetailsService">
        <bean
            class="com.espn.ese.ais.vod.ams.security.picketlink.PicketLinkAuthenticationUserDetailsService">
            <constructor-arg ref="userDetailsService" />
        </bean>
    </property>
</bean>

<bean id="userDetailsService"
    class="com.espn.ese.ais.vod.ams.security.TestUserDetailsService"
    lazy-init="true" />

页面未找到:

2016-07-28 10:19:18,023 WARN  [org.springframework.web.servlet.PageNotFound] (http-/0.0.0.0:8080-1) No mapping found for HTTP request with URI [/contextroot/css/temp.css] in DispatcherServlet with name 'spring-web'

【问题讨论】:

请发布您的 css/jsp 的目录结构以及定义如何应用过滤器以及允许哪些目录的安全配置部分。 @blur0224 - 我已根据您的评论更新了我的帖子。谢谢! SAML 安全配置中的某些内容错误地保护了 URL。如果可以,您可以发布完整的 SAML 安全配置吗?此外,将您的 spring 日志记录转为调试并在页面加载时发布相应的日志输出块。应该有一些输出显示请求被重定向。 是的,我已经更新了。 @blur0224 【参考方案1】:

最后,我找到了解决上述问题的方法。我的 spring-web-servlet.xml 中缺少 &lt;mvc:default-servlet-handler /&gt;

感谢@bluro224 抽出宝贵时间。

【讨论】:

以上是关于SAMLRequest 403 在 css 链接标签中拒绝访问的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 中的 base_url() 和 403 错误

JS周刊#403 - 庆祝V8十周年,下一代包管理Tink,Web Workers快速介绍,JavaScript更新CSS变量

AADSTS750054:SAMLRequest 或 SAMLResponse 必须作为查询字符串参数出现在 SAML 重定向绑定的 HTTP 请求中

Nginx 为 CSS/JS 文件提供 403 错误

CSS 中的相对字体 URL 在 S3 上导致 403

自定义 403 错误页面未加载 CSS