2.2.2. 设置 SP
要将应用程序设置为 SP,必须执行以下步骤:
在创建和部署应用之前,必须先创建和配置安全域。
为 SP 配置安全域.
由于 IDP 处理用户的凭据挑战并发布 SAML v2 安全断言,SP 负责验证这些断言。仍然需要安全域才能执行此验证,但身份存储则不需要。在这种情况下,SP 的安全域必须使用
SAML2LoginModule。用于添加安全域的管理 CLI 命令
/subsystem=security/security-domain=sp:add(cache-type=default) /subsystem=security/security-domain=sp/authentication=classic:add /subsystem=security/security-domain=sp/authentication=classic/login-module=org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule:add(code=org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule,flag=required) reload警告SAML2LoginModule仅用于使用 PicketLink 和 SAML 的应用,且不应在没有 PicketLink Service Provider Undertow ServletExtension(org.picketlink.identity.federation.bindings.wildfly.sp.SPServletExtension)的情况下使用。这样做会带来潜在的安全风险,因为SAML2LoginModule 或SAML2CommonLoginModule将始终接受EMPTY_STR的默认密码。例如,如果 SP 应用中没有安装 PicketLink Service Provider Undertow ServletExtension,也会发生这种情况。在为 JBoss EAP 配置 SP 应用时,PicketLink Service Provider Undertow ServletExtension 会自动安装。如果SAML2LoginModule与其他登录模块堆叠时,也会发生这种情况:<security-domain name="sp" cache-type="default"> <authentication> <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="optional"> <module-option name="password-stacking" value="useFirstPass"/> </login-module> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="users.properties"/> <module-option name="rolesProperties" value="roles.properties"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module> </authentication> </security-domain>SAML2LoginModule用于根据断言为用户构建安全上下文。PicketLink SAML Authenticator,由 PicketLink Service Provider Undertow ServletExtension(org.picketlink.identity.federation.bindings.wildfly.sp.SPServletExtension)使用SAML2LoginModule,并允许将身份验证决策延迟到 IDP, 它在 SP 的 picketlink.xml中配置。验证器负责根据安全断言(在本例中为 SAML 断言)验证由 IDP 颁发的主体。它们截获向应用发出的每个请求,检查请求中是否存在 SAML 断言,验证断言,执行主体的 SAML 特定验证,并在请求的应用中创建主体的安全上下文。
身份验证器的一部分在
jboss-web.xml 文件中配置,方法是定义要在身份验证和授权主体时使用的安全域。您还必须确保在web.xml中指定 <login-config>并声明必要的依赖项,这在后续步骤中完成。SP 的
jboss-web.xml文件必须具有以下内容:-
<security-domain>,用于指定用于身份验证和授权的安全域。
jboss-web.xml文件示例<jboss-web> <security-domain>sp</security-domain> <context-root>sales-post</context-root> </jboss-web>-
为 SP 配置
web.xml文件。SP 的
web.xml文件必须包含以下内容:-
带有
<,其中包含一个web-resource-collection> 的 <security-constraint><url-pattern>,它映射到安全区域的 URL 模式。另外,<security-constraint>也可以包含<auth-constraint> 来替代允许的角色。 -
如果在
<auth-constraint>中指定了任何角色,这些角色应在<security-role>中定义。 -
带有
<。SAML 验证器需要此项。auth-method> 指定 FORM>身份验证的 <login-config
web.xml 文件示例
<web-app> <display-name>SP</display-name> <description>SP</description> <!-- Define a Security Constraint on this Application --> <security-constraint> <web-resource-collection> <web-resource-name>SP</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>All</role-name> </auth-constraint> </security-constraint> <!-- Security roles referenced by this web application --> <security-role> <description> The role that is required to log in to the SP Application </description> <role-name>All</role-name> </security-role> <!-- Define the Login Configuration for this Application --> <login-config> <auth-method>FORM</auth-method> </login-config> </web-app>注意建议您在应用中定义一个欢迎页面。默认情况下,JBoss EAP 会查找名为
index.jsp的文件,但可以使用web.xml中的<welcome-file-list>进行配置。注销过程会尝试重定向主体以在成功注销时重定向
logout.jsp。确保此文件在应用的根目录中定义。-
带有
声明 SP 所需的依赖关系。
Web 应用充当 SP 要求在
jboss-deployment-structure.xml中定义依赖项,以便能够找到org.picketlink类。JBoss EAP 提供所有必需的org.picketlink和相关类,应用程序只需要将其声明为使用它们的依赖项。使用 jboss-deployment-structure.xml 进行 Declare 依赖项
<jboss-deployment-structure> <deployment> <dependencies> <module name="org.picketlink" services="import"/> </dependencies> </deployment> </jboss-deployment-structure>注意在之前的 JBoss EAP 版本中,您已声明过同样的依赖关系,但会声明一个 valve 以安装 SAML 身份验证器。随着 JBoss EAP 7 中引入 Undertow,您无需使用 PicketLink SAML Authenticators 手动配置部署。现在,当您定义使用
services="import"和org.picketlink依赖项时会自动配置它们。您必须声明此配置,才能为您的部署启用 SAML。为 SP 创建和配置 picketlink.xml 文件.
picketlink.xml文件负责 Authenticator 的行为,并在应用的启动时加载。该文件必须至少包含以下元素:
-
<PicketLinkSP>定义 IDP 的 URL(<IdentityURL>)和 SP(<ServiceURL>)的 URL。 -
<Handlers>定义处理 SAML 请求和响应所需的一组处理程序。
picketlink.xml 文件示例
<PicketLink xmlns="urn:picketlink:identity-federation:config:2.1"> <PicketLinkSP xmlns="urn:picketlink:identity-federation:config:2.1" BindingType="POST"> <IdentityURL>${idp.url::http://localhost:8080/identity/}</IdentityURL> <ServiceURL>${sales-post.url::http://localhost:8080/sales-post/}</ServiceURL> </PicketLinkSP> <Handlers xmlns="urn:picketlink:identity-federation:handler:config:2.1"> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.SAML2LogOutHandler" /> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.SAML2AuthenticationHandler" /> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.RolesGenerationHandler" /> </Handlers> </PicketLink>注意不推荐使用 SP,但也可以将 SP 配置为使用 HTTP/REDIRECT,方法是将
BindingType="POST"更改为BindingType="REDIRECT"。警告处理程序通过责任链来实施,每个处理程序按照 selectet
link.xml定义的顺序执行请求和响应的逻辑。务必要注意处理程序的配置顺序。默认情况下,
optetlink.xml位于 SP Web 应用的WEB-INF目录中;但是,可以配置应用程序外部的 picketlink.xml的自定义路径。当一个或多个 JBoss EAP 实例的多个应用共享相同的 picketlink.xml配置时,这很有用。-
可选: 为 picket
link.xml设置自定义位置。您可以使用
CONFIG_FILE参数为picketlink.xml指定自定义位置。这可以通过在web.xml中添加<context-param>元素来完成。使用
CONFIG_FILE参数<context-param> <param-name>CONFIG_FILE</param-name> <param-value>/path/to/picketlink.xml</param-value> </context-param>您还可以使用
org.picketlink.federation.saml.CONFIG_PROVIDER参数来指定自定义配置供应商。这可让您创建一个扩展org.picketlink.identity.federation.web.util.SAMLConfigurationProvider的自定义实现,以提供自己的配置逻辑。使用
org.picketlink.federation.saml.CONFIG_PROVIDERParameter<context-param> <param-name>org.picketlink.federation.saml.CONFIG_PROVIDER</param-name> <param-value>MyConfigurationProvider</param-value> </context-param>注意显示的管理 CLI 命令假定您在运行 JBoss EAP 单机服务器。有关将管理 CLI 用于 JBoss EAP 受管域的更多详细信息,请参见 JBoss EAP管理 CLI 指南。