jboss - JBoss EAP 7.0 上的 SAML 服务提供商

标签 jboss saml picketlink

我正在尝试将 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 创建。

我的 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>

感谢任何建议,谢谢!

最佳答案

我建议您查看 keycloak saml 适配器,因为 pickelink 已被弃用。

一些有用的链接: 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 错误,请确保您在 session 中获得正确的角色。我永远无法将它们从 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>

关于jboss - JBoss EAP 7.0 上的 SAML 服务提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42463526/

相关文章:

java - 无法从 su - <user> 运行 cmd

php - SSOCircle 不断重定向到同意页面 SAML2.0

c# - 使用 .net 库以编程方式创建 SAML 协议(protocol)登录请求

java - 适用于多个应用程序的 PicketLink 单个实例

java - 获取 JAX-RS 中请求的目标 Java 方法以使用 Picketlink 进行授权

java - 构建工作区期间的 StackOverflowError

ssl - 在 JBoss AS 7.1.1 上关闭 SSLv3

.net - 适用于 .NET 的 SAML 库/组件

java - 如何自定义 PicketLink AuthenticationFilter?

java - Maven:Hibernate 版本错误?