如何在我的新SecurityContext.xml中配置samlIDPDiscovery bean?

时间:2014-03-11 10:52:41

标签: spring-security saml-2.0 spring-saml

我最近开始阅读有关SAML的内容,并尝试将类似于Spring的SAML示例项目的内容实现到我现有的Java应用程序中(如果我问一些愚蠢的话,请饶恕我!)。我现有的应用程序有一个Login.jsp,它要求用户凭据并根据登录进行验证。我想为我的应用程序实现SSO的想法。 首先,我已经很好地理解了Spring Saml示例项目。在其SecurityContext.xml中,samlIDPDiscovery bean配置为:

<!-- IDP Discovery Service -->
<bean id="samlIDPDiscovery" class="org.springframework.security.saml.SAMLDiscovery">
    <property name="idpSelectionPath" value="/WEB-INF/security/idpSelection.jsp"/>
</bean>

idpSelection.jsp具有以下html部分代码:

<h1>IDP selection</h1>

<%
WebApplicationContext context =        WebApplicationContextUtils.getWebApplicationContext(getServletConfig().getServletContext());
MetadataManager mm = context.getBean("metadata", MetadataManager.class);
Set<String> idps = mm.getIDPEntityNames();
pageContext.setAttribute("idp", idps);
%>

<p>
<form action="<c:url value="${requestScope.idpDiscoReturnURL}"/>" method="GET">
<table>
    <tr>
        <td><b>Select IDP: </b></td>
        <td>
            <c:forEach var="idpItem" items="${idp}">
                <input type="radio" name="${requestScope.idpDiscoReturnParam}"   id="idp_<c:out value="${idpItem}"/>" value="<c:out value="${idpItem}"/>"/>
                <label for="idp_<c:out value="${idpItem}"/>"><c:out value="${idpItem}"/></label>
                <br/>
            </c:forEach>
        </td>
    </tr>
    <tr>
        <td>&nbsp;</td>
        <td><input type="submit" value="Login"/></td>
    </tr>
</table>
</form>
</p>

<p>
<a href="<c:url value="/saml/web/metadata"/>">Metadata information</a>
</p>

<%
response.sendRedirect("http://localhost:6443/spring-saml/saml/login/alias/defaultAlias?   idp=http%3A%2F%2Fidp.ssocircle.com");
%>

因此,如果我想通过对我的Login.jsp和securityContext.xml进行适当的更改来选择适当的IdP并在点击登录时重定向到选定的Idp登陆页面来实现类似上面的内容,我该如何处理?我已经尝试过这么久了,但我无法做到。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:4)

只要您基于Spring SAML示例应用程序配置应用程序,您只需将用户重定向到scheme:// host:port / context / saml / login?idp = entityId其中entityId可以在您的IDP中找到元数据。这将自动启动SSO过程并跳过发现。