JBoss EAP 7.0上的SAML服务提供商
我尝试将JBoss EAP 7.0用作SAML服务提供商,对其进行“大部分”配置,但在最后一步,当我部署为SP的应用程序抛出403时遇到问题。我无法从JBoss/PicketLink中获取调试日志以进一步排除故障 联合流程主要工作—我从SP应用程序开始。签名的authnRequest将被发送到我的IDP(不是JBoss)。IDP正在接受请求,挑战我登录,然后生成签名断言并将其发回JBoss上的SP应用程序。在这一点上,我收到了403 因此,我知道PicketLink子系统(我通过JBoss控制台配置的)已经部署并工作,否则我将永远无法获得签名的authnRequest 现在我试图挤出一些调试,以便进一步排除故障。我在picketlink.xml中找到了一些引用属性EnableAuditing的旧文档,但这显然早于子系统配置方法 我尝试为PicketLink创建一个日志文件,该日志文件包含org.PicketLink.common的消息,但仅此而已。不会从实际的联合活动创建任何消息,即使是authnRequest创建 My standalone.xml fle包含以下新元素(除日志部分外,所有元素均通过控制台创建):JBoss EAP 7.0上的SAML服务提供商,jboss,saml,picketlink,Jboss,Saml,Picketlink,我尝试将JBoss EAP 7.0用作SAML服务提供商,对其进行“大部分”配置,但在最后一步,当我部署为SP的应用程序抛出403时遇到问题。我无法从JBoss/PicketLink中获取调试日志以进一步排除故障 联合流程主要工作—我从SP应用程序开始。签名的authnRequest将被发送到我的IDP(不是JBoss)。IDP正在接受请求,挑战我登录,然后生成签名断言并将其发回JBoss上的SP应用程序。在这一点上,我收到了403 因此,我知道PicketLink子系统(我通过JBoss控制台
以及PickeLink子系统:
<subsystem xmlns="urn:jboss:domain:picketlink-federation:2.0">
<federation name="jboss-sp">
<identity-provider name="my-idp" url="https://********" security-domain="sp" external="true" support-signatures="true">
<trust>
<trust-domain name="***"/>
<trust-domain name="***:18080"/>
<trust-domain name="***:18443"/>
</trust>
</identity-provider>
<service-providers>
<service-provider name="testapp-war-0.0.5-SNAPSHOT-default.war" security-domain="sp" url="http://***:18080/testapp/protected"/>
<service-provider name="testapp-war-0.0.5-SNAPSHOT-secured.war" security-domain="sp" url="http://***:18080/testapp/protected" support-signatures="true"/>
</service-providers>
<key-store file="D:\\JBoss\\SSL\\samplepartner.jks" password="password" sign-key-alias="samplepartner" sign-key-password="password">
<keys>
<key name="***" host="***"/>
</keys>
</key-store>
</federation>
</subsystem>
任何建议,谢谢 我建议看一下KeyClope saml适配器,因为pickelink已经被弃用了 一些有用的链接: 您还将获得更好的日志记录活动,只需添加如下日志记录程序:
<logger category="org.keycloak.saml">
<level name="DEBUG"/>
</logger>
现在,回到picketlink和您的原始问题
关于403错误,请确保您在会话中获得了正确的角色。事实上,如果你检查github中的代码,你将不会看到太多日志语句。。。我知道有点失望
您可以使用非安全JSP查看您拥有哪些角色
<p>Is in role XXXX <%= request.isUserInRole("XXXX") %> </p>
担任XXXX角色
如果您仍然想探索使用picketlink的解决方案(我不推荐这样做),我将在这里留下一个以前适用于我的配置
请注意:
1) 在安全域部分声明审核提供程序。
2) 它利用了角色映射器,如果您不控制从IdP服务器提交的角色,该映射器非常方便
希望能有帮助
<extension module="org.wildfly.extension.picketlink"/>
<subsystem xmlns="urn:jboss:domain:picketlink-federation:1.1">
<federation name="my-federation">
<key-store file="./keyStore.jks" relative-to="java.home" password="pass123" sign-key-alias="sp" sign-key-password="pass123">
<keys>
<key name="idp" host="idpdomain.com"/>
</keys>
</key-store>
<identity-provider name="anyname" url="url to the sso endpoint" external="true" encrypt="false" support-signatures="true" strict-post-binding="true" ssl-authentication="false" support-metadata="true"/>
<service-providers>
<service-provider name="myapp.war" security-domain="saml-realm" url="https://spdomain.com/myapp/" post-binding="true" support-signatures="true" support-metadata="true" strict-post-binding="true" logout-page="/logout.jsp">
<handlers>
<handler name="SAML2LogOutHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2LogOutHandler"/>
<handler name="SAML2AuthenticationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2AuthenticationHandler">
<handler-parameter name="CLOCK_SKEW_MILIS" value="120000"/>
<handler-parameter name="NAMEID_FORMAT" value="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
</handler>
<handler name="RolesGenerationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.RolesGenerationHandler"/>
<handler name="SAML2SignatureGenerationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2SignatureGenerationHandler"/>
<handler name="SAML2SignatureValidationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2SignatureValidationHandler"/>
</handlers>
</service-provider>
</service-providers>
</federation>
</subsystem>
<security-domain name="saml-realm">
<authentication>
<login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="org.jboss.security.auth.spi.RoleMappingLoginModule" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="rolesProperties" value="${jboss.server.config.dir}/rolesMapping-roles.properties"/>
<module-option name="replaceRole" value="true"/>
</login-module>
</authentication>
<audit>
<provider-module code="org.picketlink.identity.federation.core.audit.PicketLinkAuditProvider"/>
</audit>
</security-domain>
我知道这是一个老问题,但我想知道你是否解决了它。我不是专家,但我可以共享一个适用于我的picketlink子系统配置。你好,亚历克斯-事实上,我从来没有让它工作过,我放弃了。我仍然有我用来测试这个的虚拟机的快照,所以如果你有一个正常的配置,我想试试。谢谢
<extension module="org.wildfly.extension.picketlink"/>
<subsystem xmlns="urn:jboss:domain:picketlink-federation:1.1">
<federation name="my-federation">
<key-store file="./keyStore.jks" relative-to="java.home" password="pass123" sign-key-alias="sp" sign-key-password="pass123">
<keys>
<key name="idp" host="idpdomain.com"/>
</keys>
</key-store>
<identity-provider name="anyname" url="url to the sso endpoint" external="true" encrypt="false" support-signatures="true" strict-post-binding="true" ssl-authentication="false" support-metadata="true"/>
<service-providers>
<service-provider name="myapp.war" security-domain="saml-realm" url="https://spdomain.com/myapp/" post-binding="true" support-signatures="true" support-metadata="true" strict-post-binding="true" logout-page="/logout.jsp">
<handlers>
<handler name="SAML2LogOutHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2LogOutHandler"/>
<handler name="SAML2AuthenticationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2AuthenticationHandler">
<handler-parameter name="CLOCK_SKEW_MILIS" value="120000"/>
<handler-parameter name="NAMEID_FORMAT" value="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
</handler>
<handler name="RolesGenerationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.RolesGenerationHandler"/>
<handler name="SAML2SignatureGenerationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2SignatureGenerationHandler"/>
<handler name="SAML2SignatureValidationHandler" class-name="org.picketlink.identity.federation.web.handlers.saml2.SAML2SignatureValidationHandler"/>
</handlers>
</service-provider>
</service-providers>
</federation>
</subsystem>
<security-domain name="saml-realm">
<authentication>
<login-module code="org.picketlink.identity.federation.bindings.jboss.auth.SAML2LoginModule" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="org.jboss.security.auth.spi.RoleMappingLoginModule" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
<module-option name="rolesProperties" value="${jboss.server.config.dir}/rolesMapping-roles.properties"/>
<module-option name="replaceRole" value="true"/>
</login-module>
</authentication>
<audit>
<provider-module code="org.picketlink.identity.federation.core.audit.PicketLinkAuditProvider"/>
</audit>
</security-domain>