我正在尝试使用JBoss EAP 7.0作为SAML服务提供商,拥有它"主要是"已配置但在我作为SP部署的应用程序抛出403时,在最后一步遇到问题。我无法从JBoss / PicketLink中获取调试日志以进一步排除故障。
联合流程主要起作用 - 我从我的SP应用程序开始。签名的authnRequest将转到我的IDP(不是JBoss)。 IDP正在接受请求,要求我登录,然后生成签名断言并将其POST回JBoss上的SP应用程序。此时我收到了403。
所以我知道PicketLink子系统(我通过JBoss控制台配置)已部署并正常工作,否则我从未获得签名的authnRequest。
现在我试图挤出一些调试,以便我可以进一步排除故障。我在picketlink.xml中找到了一些引用属性EnableAuditing的旧文档,但这明显早于子系统配置方法。
我已经尝试为PicketLink创建一个日志文件,而日志文件包含来自org.picketlink.common的消息,但就是这样。实际的联合活动,甚至创建authnRequest都不会创建任何消息。
我的standalone.xml文件包含以下新元素(全部通过控制台创建,但日志记录部分除外):
<periodic-rotating-file-handler name="PICKETLINK" autoflush="true">
<formatter>
<named-formatter name="PATTERN"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="picketlink.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="org.picketlink">
<level name="DEBUG"/>
<handlers>
<handler name="PICKETLINK"/>
</handlers>
</logger>
和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>
任何建议表示赞赏,谢谢!
答案 0 :(得分:0)
由于不推荐使用pickelink,因此我建议您看看keycloak saml适配器。
一些有用的链接: https://www.keycloak.org/docs/latest/securing_apps/#_saml-general-config
How to map third party IdP SAML attributes to my local application roles using keycloak-saml adapter
您还将获得更好的日志记录活动,只需添加这样的记录器即可:
<logger category="org.keycloak.saml">
<level name="DEBUG"/>
</logger>
现在,回到纠察链接和您原来的问题。
关于403错误,请确保您在会话中获得正确的角色。实际上,我永远无法将这些日志从picketlink子系统中注销,如果您在github中检查代码,您将不会看到很多日志记录语句……我知道这有点令人失望。
您可以使用不安全的JSP来查看您拥有的角色。
<p>Is in role XXXX <%= request.isUserInRole("XXXX") %> </p>
如果您仍然想使用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>