2.3. 通过 Federation 子系统配置 INP 和 SP
除了手动配置 IDP 和 SP 外,使用 SAML v2 的单点登录也可以使用 JBoss EAP 子系统进行配置。这种配置方法称为 域模型,允许所有配置集中放在 JBoss EAP 实例上,而不是个别应用。这也允许使用 JBoss EAP 管理界面(如管理控制台和管理控制台)创建和更新单点登录配置。
federations
在使用 JBoss EAP 子系统配置和部署 Ins 和 SP 时,它们按照联合分组 。联盟可以理解 为信任链。信任链包含共享通用配置的应用,包括证书和 SAML 特定的配置。它还包含相互信任的域,这些域可准确记录用于标识用户的进程、使用的身份验证系统的类型,以及与生成的身份验证凭据关联的任何策略。每个联合都有一个 IDP 和多个 SP。联合还定义了 SP 和 IDP 之间的信任关系,免除了每个 SP 单独跟踪和维护该信息的需求。
2.3.1. 配置子系统 复制链接链接已复制到粘贴板!
在可以使用子系统设置联合之前,需要在 JBoss EAP 中启用和配置子系统。启用和配置子系统需要以下步骤:
建议您在执行这些步骤之前关闭 JBoss EAP 实例。
更新扩展。
在 JBoss EAP 配置文件、用于单机实例的
standalone.xml或域的 domain.xml中,添加org.wildfly.extension.picketlink扩展:<extensions> ... <extension module="org.wildfly.extension.picketlink"/> ... </extensions>添加子系统。
在 JBoss EAP 配置文件(用于
独立实例或中,添加域的 domain.xml)的 standalone.xmlpicketlink-federation子系统:<profile> ... <subsystem xmlns="urn:jboss:domain:picketlink-federation:2.0"/> ... </profile>注意也可以在
EAP_HOME/docs/examples/configs/standalone-picketlink.xml中找到配置示例。
2.3.2. 设置联盟 复制链接链接已复制到粘贴板!
设置和配置子系统后,您可以使用管理接口来配置联合。在使用子系统设置联合之前,您必须准备 IDP 和 SP 应用程序。
2.3.2.1. 准备 SP 和 IDP 应用程序 复制链接链接已复制到粘贴板!
如上一节所述,当使用 SAML v2 配置单点登录时,需要创建或更新以下文件:
-
web.xml -
jboss-web.xml -
picketlink.xml -
jboss-deployment-structure.xml
在使用 SAML v2 为单点登录使用 SAML v2 设置子系统时,大部分配置都是从管理接口中进行,而无需更新任何这些文件。唯一必要的配置是,在 I.xml 和 SP 的 web.xml 文件中配置 >。此外,<security-constraint> 和 关联的 <security-roleweb 以及登录和错误页面也必须出现在 IDP 中。
.xml 中的 <login-config>
如果已在 上 一节中所述配置了 IDP 或 SP,则需要删除以下文件:
-
jboss-web.xml -
picketlink.xml -
jboss-deployment-structure.xml
准备好应用后,必须将它们部署到 JBoss EAP 实例。
2.3.2.2. 使用管理 CLI 创建联盟 复制链接链接已复制到粘贴板!
以下命令显示如何使用以下信息添加名为 new-federation 的示例联合:
-
身份提供程序
IDP.war部署到 JBoss EAP 实例,网址为http://localhost:8080/identity/ -
服务提供商
SP.war部署到 JBoss EAP 实例,网址为http://localhost:8080/sales-post/ -
分别为身份提供程序和服务提供商正确配置了安全域
idp和sp
要使用管理 CLI 配置联合,您必须:
添加新联合。
/subsystem=picketlink-federation/federation=new-federation:add向联合中添加身份提供程序。
/subsystem=picketlink-federation/federation=new-federation/identity-provider=IDP.war:add(url="http://localhost:8080/identity/",security-domain=idp)向联合中添加服务提供商。
/subsystem=picketlink-federation/federation=new-federation/service-provider=SP.war:add(url="http://localhost:8080/sales-post/",security-domain=sp)向联合中添加信任域。
/subsystem=picketlink-federation/federation=new-federation/identity-provider=IDP.war/trust-domain="localhost:8080":add
2.3.2.3. 联合子系统属性参考 复制链接链接已复制到粘贴板!
picketlink-federation 子系统具有以下结构:
联合
- saml
key-store
Keys
- key
identity-provider
trust
- trust-domain
- role-generator
- attribute-manager
处理程序
handler
- handler-parameter
service-providers
service-provider
处理程序
handler
- handler-parameter
联合子系统示例
<subsystem xmlns="urn:jboss:domain:picketlink-federation:2.0">
<federation name="federation-redirect-with-signatures">
<key-store file="/jbid_test_keystore.jks" password="store123" sign-key-alias="servercert" sign-key-password="test123">
<keys>
<key name="servercert" host="${jboss.bind.address:localhost},127.0.0.1"/>
</keys>
</key-store>
<identity-provider name="idp-redirect-sig.war" url="http://${jboss.bind.address:127.0.0.1}:8080/idp-redirect-sig/" security-domain="idp" support-signatures="true" strict-post-binding="false">
<trust>
<trust-domain name="${jboss.bind.address:127.0.0.1}"/>
</trust>
<handlers>
<handler class-name="com.mycompany.CustomHandler">
<handler-parameter name="param1" value="paramValue1"/>
<handler-parameter name="param2" value="paramValue2"/>
<handler-parameter name="param3" value="paramValue3"/>
</handler>
</handlers>
</identity-provider>
<service-providers>
<service-provider name="sp-redirect-sig1.war" security-domain="sp" url="http://${jboss.bind.address:127.0.0.1}:8080/sp-redirect-sig1/" post-binding="false" support-signatures="true">
<handlers>
<handler class-name="com.mycompany.CustomHandler">
<handler-parameter name="param1" value="paramValue1"/>
<handler-parameter name="param2" value="paramValue2"/>
<handler-parameter name="param3" value="paramValue3"/>
</handler>
</handlers>
</service-provider>
<service-provider name="sp-redirect-sig2.war" security-domain="sp" url="http://${jboss.bind.address:127.0.0.1}:8080/sp-redirect-sig2/" post-binding="false" support-signatures="true"/>
</service-providers>
</federation>
</subsystem>
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 联合名称。 |
saml
定义 SAML 类型。此类型定义如何处理和创建 SAML 断言的所有配置。
| 属性 | 默认 | 描述 |
|---|---|---|
| clock-skew | 0 | 定义 SAML 断言的时钟偏移。该值必须以毫秒为单位指定。 |
| token-timeout | 5000 | 定义 SAML 断言的超时时间。该值必须以毫秒为单位指定。 |
key-store
定义 KeyStore 类型。这种类型定义密钥存储的配置方式。
| 属性 | 默认 | 描述 |
|---|---|---|
| password | 定义密钥存储的密码。 | |
| sign-key-alias | 定义签名文档时使用的别名。 | |
| sign-key-password | 定义 sign-key-alias 的密码。 | |
| file | 定义文件位置。 | |
| relative-to |
个系统提供的命名路径,如 |
Keys
密钥配置.
key
定义密钥.
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 定义给定密钥存储中密钥的名称或别名。 | |
| 主机 | 代表给定密钥验证的主机名的单个或以逗号分隔的字符串列表。 |
identity-provider
定义身份提供程序类型。
| 属性 | 默认 | 描述 |
|---|---|---|
| name |
身份提供程序的唯一名称。名称必须是部署单元名称。例如, | |
| url | 此身份提供程序的 URL. | |
| support-signatures | false | 指明是否支持签名。 |
| encrypt | false | 指明是否支持加密。 |
| security-domain |
用于验证和授权用户的安全域的名称。如果 IDP 不是外部,则需要此属性。如需了解更多详细信息,请参阅 | |
| strict-post-binding | true |
指明 IDP 应始终使用 HTTP |
| external | false | 指明配置是否引用外部 IDP。 |
| support-metadata | false | 启用/禁用 SAML 元数据支持. |
| ssl-authentication | false |
指明身份提供程序还应支持 HTTP |
trust
组受信任的域类型.
trust-domain
定义受信任的域类型。
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 定义域名。 | |
| cert-alias | 定义此域的证书别名。 |
role-generator
角色生成器 实施,用于加载角色并将其推送到 SAML 断言。
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 定义角色生成器名称。 | |
| class-name |
| |
| Code | 定义映射到内置类型的别名。 | |
| module |
定义加载 |
attribute-manager
AttributeManager 实施,用于加载角色并将其推送到 SAML 断言。
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 定义属性管理器名称。 | |
| class-name |
| |
| Code | 定义映射到内置类型的别名。 | |
| module |
定义加载 |
处理程序
组处理程序类型.
handler
定义处理程序类型。
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 定义处理程序名称。 | |
| class-name | 定义处理程序类名称。 | |
| Code | 定义映射到内置类型的别名。 |
handler-parameter
定义处理程序参数类型.
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 定义参数名称。 | |
| value | 定义参数值。 |
service-providers
对服务提供商类型进行分组.
service-provider
定义服务提供商类型。
| 属性 | 默认 | 描述 |
|---|---|---|
| name | 此实例的名称。此名称必须是部署单元名称。 | |
| url | 此服务提供商的 URL. | |
| post-binding | true |
指明要使用的 SAML 绑定。如果为 true,将使用 HTTP |
| strict-post-binding | true |
指明要使用的 SAML 绑定。如果为 true,将使用 HTTP |
| support-signatures | false | 指明是否支持签名。 |
| support-metadata | false | 启用/禁用 SAML 元数据支持. |
| security-domain | 用于验证用户身份的安全域名. | |
| error-page |
| 定义自定义错误页面位置。 |
| logout-page |
| 定义自定义注销页面位置。 |