【问题标题】:OpenAM/OpenSSO agent for JBoss EAP 6 / JBoss AS 7JBoss EAP 6 / JBoss AS 7 的 OpenAM/OpenSSO 代理
【发布时间】:2012-08-05 18:13:02
【问题描述】:

我想将 OpenAM/OpenSSO SSO 功能添加到 JBoss EAP 6 或 JBoss AS 7。这意味着我必须在 JBoss 上安装 SSO Java EE 代理。 Forgerock's OpenAM download page 提供了为以前版本的 JBoss 获取代理的机会,但不支持新的 JBoss EAP 6 / JBoss AS 7(目前)。

您知道这样的代理是否在某处可用,或者在不久的将来会可用吗?如果没有,您知道如何更改 JBoss 配置以使其与 OpenAM 一起使用吗?

【问题讨论】:

    标签: jboss7.x agent opensso openam


    【解决方案1】:

    几天前我注意到 forgerock 现在已经为 JBoss 7.x 发布了一个 J2EE 代理,但我还没有测试它。见http://forgerock.org/openam.html

    【讨论】:

    • 我们在 EAP 6.2.0 上使用它并且效果很好,安装程序似乎不理解 EAP 6.X 模块的布局,因此需要将 forgerock 模块移动到正确的位置首先是目录,但其他方面都很好。
    【解决方案2】:

    一个想法是放置一个安装了 OpenAM 策略代理的 Apache http 服务器,以便在 Jboss 7 前面获取请求。

    这称为反向代理集成。你可以在这里查询更多详情: http://developers.sun.com/identity/reference/techart/app-integration.htmlhttp://docs.oracle.com/cd/E19575-01/820-3746/gjbna/index.html

    使用反向代理方法,您不必关心应用程序的运行时环境。

    【讨论】:

    • 非常感谢,这似乎是一个有趣的方法,它避免了在所有应用服务器上安装代理...
    【解决方案3】:

    JBoss EAP 6 目前似乎没有官方代理。

    但是,我可以通过手动配置我的 JBoss 实例使其与 OpenAM SSO 一起使用。为此,我从 forgerock 下载站点上现有的 jboss_v42_agent.zip 开始。使用 jars agent.jar、openssoclientsdk.jar 和代理配置文件,我可以使用这个 module.xml 构建一个 JBoss 模块:

    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.1" name="openam.agents">
      <resources>
        <resource-root path="agent.jar"/>
        <resource-root path="openssoclientsdk.jar"/>
        <resource-root path="."/>
      </resources>
       <dependencies>
        <module name="javax.api"/>
        <module name="javax.servlet.api" />
        <module name="org.picketbox"/>
      </dependencies>
    </module>
    

    然后我必须通过添加安全域来更新standalone.xml:

      <security-domain name="AMRealm" cache-type="default">
        <authentication>
          <login-module code="com.sun.identity.agents.jboss.v40.AmJBossLoginModule" flag="required">
            <module-option name="unauthenticatedIdentity" value="anonymous"/>
          </login-module>
          <login-module code="org.jboss.security.ClientLoginModule" flag="required">
            <module-option name="restore-login-identity" value="true"/>
          </login-module>
        </authentication>
      </security-domain>
    

    在修改了 MANIFEST.MF 后,我在 JBoss 上部署了 agentapp.war,添加了一行:

    Dependencies: openam.agents
    

    其中 openam.agents 是我的模块的名称。

    现在对于我要为其启用 SSO 的应用程序,我还必须执行一些更新:

    1. web.xml:添加和节点:

      <filter>
        <filter-name>Agent</filter-name>
        <display-name>Agent</display-name>
        <description>OpenAM Tomcat Policy Agent Filter</description>
        <filter-class>com.sun.identity.agents.filter.AmAgentFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>Agent</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>ERROR</dispatcher>
      </filter-mapping>
      
    2. jboss-web.xml:声明要使用的安全域

      <?xml version="1.0" encoding="UTF-8"?>
      <jboss-web>
        <security-domain>AMRealm</security-domain>
      </jboss-web>
      
    3. MANIFEST.MF:应用与 agentapp.was 中相同的修改(添加“Dependencies: openam.agents”行)

    我不确定这是否是在 JBoss EAP 6 / AS 7 上启用 SSO 的最佳方式(我不是专家),但它似乎运作良好。

    【讨论】:

    • request.getUserPrincipal() 对你有用吗?
    • 是的,但该值不区分大小写(我猜和往常一样)
    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多