【问题标题】:Single Sign on Not working on Jboss单点登录在 Jboss 上不起作用
【发布时间】:2024-01-17 21:11:01
【问题描述】:

我正在尝试在 Jboss 服务器中进行单点登录。我修改了standalone.xml 文件,如下所示。

    <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
            <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
            <virtual-server name="default-host" enable-welcome-root="true">
                <alias name="localhost"/>
                <sso domain="localhost" reauthenticate="false"/>
            </virtual-server>

<security-domain name="other" cache-type="default">
    <authentication>
      <login-module code="Remoting" flag="optional">
<module-option name="password-stacking"  value="useFirstPass"/>
      </login-module>
      <login-module code="RealmUsersRoles" flag="required">
<module-option name="usersProperties" value="${jboss.server.config.dir}/application-users.properties"/>
<module-option name="rolesProperties" value="${jboss.server.config.dir}/application-roles.properties"/>
<module-option name="realm" value="ApplicationRealm"/>
<module-option name="password-stacking" value="useFirstPass"/>
      </login-module>
     </authentication>
</security-domain>

我修改了我的 jboss-web.xml,如下所示

    <jboss-web>
    <security-domain>java:/jaas/other </security-domain>
          <valve>
        <class-name>org.apache.catalina.authenticator.SingleSignOn</class-name>
    </valve>
</jboss-web>

我的 web.xml 如下所示。

    <servlet>
<servlet-name>secret</servlet-name>
<servlet-class>com.tomcat.demo.SalaryServer</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>secret</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>SecretProtection</web-resource-name>
        <url-pattern>/servlet/SalaryServer</url-pattern>
        <url-pattern>/servlet/secret</url-pattern>
        <url-pattern>/test</url-pattern>
        <http-method>GET</http-method>
        <http-method>POST</http-method>
    </web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>
FORM
<!-- BASIC, DIGEST, FORM, CLIENT-CERT  -->
</auth-method>
<form-login-config>
<!--  only useful for FORM  -->
<form-login-page>/loginpage.html</form-login-page>
<form-error-page>/errorpage.html</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
</web-app>

但单点登录仍然无法正常工作。我必须分别登录每个应用程序。请帮帮我。

【问题讨论】:

    标签: java security authentication jboss


    【解决方案1】:

    在 AS7 中启用 SSO 非常简单。只需使用这个 JBoss CLI 命令:

    /subsystem=web/virtual-server=default-host/sso=configuration:add(reauthenticate="false")
    

    它会在web 子系统下的virtual-server 元素中产生以下行:

    <sso reauthenticate="false"/>
    

    同时从您的部署中删除 jboss-web.xml - 您不需要它。阀门入口完全错误(standalone.xml 中的 sso 部分替换了它) - 它仅在旧 JBoss AS 中有效(例如 5)。 other 安全域是默认安全域 - 无需在部署配置中指定。

    还有一件事,从web.xmlsecurity-contraints 部分中删除http-method 元素。否则,所有其他 HTTP 方法将不受保护

    正确的形式是:

    <web-resource-collection>
        <web-resource-name>SecretProtection</web-resource-name>
        <url-pattern>/servlet/SalaryServer</url-pattern>
        <url-pattern>/servlet/secret</url-pattern>
        <url-pattern>/test</url-pattern>
    </web-resource-collection>
    

    【讨论】:

      最近更新 更多