2.2.2. 设置 SP


要将应用程序设置为 SP,必须执行以下步骤:

注意

在创建和部署应用之前,必须先创建和配置安全域。

  1. 为 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 的 picket link.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>

  2. 为 SP 配置 web.xml 文件。

    SP 的 web.xml 文件必须包含以下内容:

    • 带有 < web-resource-collection> 的 <security-constraint >,其中包含一个 <url-pattern>,它映射到安全区域的 URL 模式。另外,<security-constraint> 也可以包含 <auth-constraint> 来 替代允许的角色。
    • 如果在 <auth-constraint> 中指定了任何角色,这些角色应在 <security-role> 中定义。
    • 带有 < auth-method> 指定 FORM 身份验证 的 <login-config >SAML 验证器需要此项

    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。确保此文件在应用的根目录中定义。

  3. 声明 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。

  4. 为 SP 创建和配置 picketlink.xml 文件.

    该文件必须至少包含以下元素:

    • <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 目录中;但是,可以配置应用程序外部的 picket link.xml 的自定义路径。当一个或多个 JBoss EAP 实例的多个应用共享相同的 picket link.xml 配置时,这很有用。

  5. 可选: 为 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_PROVIDER Parameter

    <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 指南

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部