2.7. 配置身份提供程序以使用 Kerberos 身份验证
除了其他身份存储外,IDP 还可以将 Kerberos 用作其身份验证机制。要将 IDP 设置为使用 Kerberos,您需要执行以下操作:
它假设您有一个正常工作的 Kerberos 环境。
配置用于 Kerberos 身份验证的安全域.
您可以使用以下命令配置 IDP 所需的安全域。如需更多信息,请参阅《如何使用 Kerberos 设置 SSO 指南》的"JBoss EAP 配置传统安全子系统 "一节。
/subsystem=security/security-domain=host:add(cache-type=default) /subsystem=security/security-domain=host/authentication=classic:add /subsystem=security/security-domain=host/authentication=classic/login-module=Kerberos:add(code=Kerberos, flag=required, module-options=[debug=false, storeKey=true, refreshKrb5Config=true, useKeyTab=true, doNotPrompt=true, keyTab=/home/username/service.keytab, principal=host/SERVER_NAME@REALM_NAME]) /subsystem=security/security-domain=app-spnego:add(cache-type=default) /subsystem=security/security-domain=app-spnego/authentication=classic:add /subsystem=security/security-domain=app-spnego/authentication=classic/login-module=SPNEGO:add(code=SPNEGO, flag=required, module-options=[serverSecurityDomain=host])重要有关登录模块的更多信息,请参阅 JBoss EAP 登录模块参考中的 Kerberos 登录模块和 SPNEGO 登录模块部分。
为 SP 配置安全域。
您可以使用以下命令配置 SP 所需的安全域:如需更多信息,请参阅 设置 SP 的完整文档。
/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完成上述步骤后,将创建以下配置:
示例:IDP 和 SP 的安全域
<security-domain name="host" cache-type="default"> <authentication> <login-module code="Kerberos" flag="required"> <module-option name="debug" value="false"/> <module-option name="storeKey" value="true"/> <module-option name="refreshKrb5Config" value="true"/> <module-option name="useKeyTab" value="true"/> <module-option name="doNotPrompt" value="true"/> <module-option name="keyTab" value="/home/username/service.keytab"/> <module-option name="principal" value="HTTP/testserver@MY_REALM"/> </login-module> </authentication> </security-domain> <security-domain name="app-spnego" cache-type="default"> <authentication> <login-module code="SPNEGO" flag="required"> <module-option name="serverSecurityDomain" value="host"/> </login-module> </authentication> <mapping> ... </mapping> </security-domain> <security-domain name="sp" cache-type="default"> <authentication> <login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="required"/> </authentication> </security-domain>配置 IDP 应用。
配置 IDP 的过程与设置 IDP 部分所述的相同,但有以下更改:
- 声明 JBoss Negotiation 的额外依赖性
配置 IDP 应用,以将安全域与
SPNEGO登录模块搭配使用注意在配置 IDP 时,您不需要在配置中指定
PicketLinkSTS元素。如果是异常的PicketLink,则会从 selectetlink-core的文件加载默认配置。-VERSION.jar 内名为 core-st仅在需要时覆盖此配置。例如,更改令牌超时或为 SAML 断言指定自定义安全令牌提供程序。
示例:使用 Kerberos 和 Picketlink 依赖项的
jboss-deployment-structure.xml<jboss-deployment-structure> <deployment> <dependencies> <module name="org.picketlink" services="import"/> <module name="org.jboss.security.negotiation"/> </dependencies> </deployment> </jboss-deployment-structure>示例:IDP
中的 jboss-web.xml<jboss-web> <security-domain>app-spnego</security-domain> <context-root>identity</context-root> </jboss-web>示例:使用
PicketLinkSTS元素的 picketlink.xml<PicketLink xmlns="urn:picketlink:identity-federation:config:2.1"> <PicketLinkIDP xmlns="urn:picketlink:identity-federation:config:2.1"> <IdentityURL>${idp.url::http://localhost:8080/idp/}</IdentityURL> <Trust> <Domains>redhat.com,localhost,amazonaws.com</Domains> </Trust> </PicketLinkIDP> <Handlers xmlns="urn:picketlink:identity-federation:handler:config:2.1"> <Handler class="org.picketlink.identity.federation.web.handlers.saml2.SAML2IssuerTrustHandler" /> <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> <!-- The configuration bellow defines a token timeout and a clock skew. Both configurations will be used during the SAML Assertion creation. This configuration is optional. It is defined only to show you how to set the token timeout and clock skew configuration. --> <PicketLinkSTS xmlns="urn:picketlink:identity-federation:config:1.0" TokenTimeout="5000" ClockSkew="0"> <TokenProviders> <TokenProvider ProviderClass="org.picketlink.identity.federation.core.saml.v1.providers.SAML11AssertionTokenProvider" TokenType="urn:oasis:names:tc:SAML:1.0:assertion" TokenElement="Assertion" TokenElementNS="urn:oasis:names:tc:SAML:1.0:assertion" /> <TokenProvider ProviderClass="org.picketlink.identity.federation.core.saml.v2.providers.SAML20AssertionTokenProvider" TokenType="urn:oasis:names:tc:SAML:2.0:assertion" TokenElement="Assertion" TokenElementNS="urn:oasis:names:tc:SAML:2.0:assertion" /> </TokenProviders> </PicketLinkSTS> </PicketLink>重要您必须确保 IDP
web.xml中配置的任何角色都与 Kerberos 环境中配置的角色匹配。若要实现这一目的,可在 IDP 的安全域中配置第二个登录模块,将适当的角色映射到 SPNEGO 身份验证后,或者在 IDP 安全域中使用映射提供程序。