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

Posted

技术标签:

【中文标题】如何在我的新 SecurityContext.xml 中配置 samlIDPDiscovery bean?【英文标题】:How to configure the samlIDPDiscovery bean in my new SecurityContext.xml? 【发布时间】:2014-04-14 22:26:46 【问题描述】:

我最近开始阅读有关 SAML 的内容,并尝试在我现有的 Java 应用程序中实现类似于 Spring 的 SAML 示例项目的东西(所以如果我问了一些愚蠢的问题,请原谅我!)。我现有的应用程序有一个 Login.jsp,它要求用户提供凭据并相应地进行验证以登录。我想为我的应用程序实现 SSO 的想法。 因此,首先,我非常了解 Spring Saml-sample 项目。在其 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】:

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

【讨论】:

是的,我已经跳过了 IDP 发现并开始了 SSO 流程。感谢您的回复!

以上是关于如何在我的新 SecurityContext.xml 中配置 samlIDPDiscovery bean?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在我的新 Spring Boot 项目中关闭 Spring Security?

如何在我的新CSPROJ类库中包含带有本机dll的NuGet包?

如何将“.txt”文件中的数据库备份迁移到我的新 Rails 应用程序?

为啥 firebase auth 在我的新三星手机上不起作用?

如何限制jasper报告不要在每个组的新页面上启动?