代码之家  ›  专栏  ›  技术社区  ›  hoila

注销不适用于摘要身份验证

  •  0
  • hoila  · 技术社区  · 5 年前

    我已经安装了 Orbeon Forms 2018.2.201901010020 CE 在里面 Tomcat-8.5.37 并尝试使用用户菜单的新注销按钮-该登录在以前的orbeon版本中已经起作用。
    指定 形式 作为web.xml的login部分中的身份验证方法,所有这些方法都工作顺利。 但使用表单身份验证时,必须将密码保存为明文,这是需要避免的。
    所以我试着 摘要 作为身份验证方法,它允许保存加密的密码。
    登录有效,用户菜单报告登录的用户。
    但注销不会使会话无效。不显示orbeon注销页面,而是显示form runner主页,在用户菜单中,用户仍显示为已登录。
    再次单击“注销”按钮,所有操作都将保持不变:此时将显示用户已登录的FormRunner主页。

    properties-local.xml 我为用户菜单和容器身份验证插入了属性:

      <property
        as="xs:boolean"
        name="oxf.fr.authentication.user-menu.enable"
        value="true"/>
      <property
        as="xs:string"
        name="oxf.fr.authentication.method"
        value="container"
      />
    

    用户和角色在 tomcat_users.xml .

    web.xml 我从 <url-pattern>/fr/auth</url-pattern> <url-pattern>/fr/*</url-pattern> ,所以tomcat要求对所有 fr 页:

        <security-constraint>
            <web-resource-collection>
                <web-resource-name>Form Runner</web-resource-name>
                <!-- <url-pattern>/fr/auth</url-pattern> original -->
                     <url-pattern>/fr/*</url-pattern>
            </web-resource-collection>
            <auth-constraint>
                <role-name>orbeon-user</role-name>
            </auth-constraint>
        </security-constraint>
    

    对于我使用的摘要身份验证 摘要 login-config web.xml文件 并添加了 CredentialHandler server.xml .

            <login-config>
                <auth-method>FORM</auth-method>
                <!-- <auth-method>DIGEST</auth-method>   -->
                <form-login-config>
                    <form-login-page>/fr/login</form-login-page>
                    <form-error-page>/fr/login-error</form-error-page>
                </form-login-config>
            </login-config>
    
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase">
               <!-- <CredentialHandler
         className="org.apache.catalina.realm.MessageDigestCredentialHandler"
                  algorithm="md5" saltLength="0" iterations="1" /> -->
        </Realm>
    

    在测试中,我首先打开了页面 http://localhost/8080/orbeon/home/ . 这不是一个 法国 页面,因此它将在不要求密码的情况下显示。
    然后我选择了 书架 申请。这是一个fr页面,因此会弹出一个用于身份验证的页面。
    通过表单身份验证,将显示orbeon登录页面: orbeon login
    使用摘要身份验证,将显示tomcat登录页面:
    tomcat login

    在这两种情况下,成功登录后都会显示bookshelf summary页面,用户菜单会显示登录的用户。
    bookshelf summary page with user menu


    在单击注销按钮后的摘要身份验证中,显示的下一页是form runner主页,而不是orbeon注销页。用户保持登录状态,用户名显示在用户菜单中。
    再次单击“注销”按钮,所有内容都将保持不变:此时将显示表单运行器主页,用户已登录:
    form runner home page after logout


    在两个orbeon日志的链接附近:
    的orbeon.log 形式 身份验证 orbeon log form authentication
    的orbeon.log 摘要 身份验证 orbeon log DIGEST authentication

    注意。在orbeon摘要日志中,我看到了断管错误,在orbeon表单日志中,我没有看到这些错误。


    我需要更改什么,以便注销也能与摘要身份验证一起工作?

    非常感谢你的建议

    1 回复  |  直到 5 年前
        1
  •  0
  •   ebruchez    5 年前

    简而言之,我建议:

    1. 不使用 DIGEST 在里面 web.xml . 使用 FORM . 大多数web应用程序使用某种基于表单的身份验证。
    2. 确保使用HTTPS,而不是纯HTTP。
    3. 请确保使用一个不在数据库中以clear存储密码的安全域。这与是否使用基于表单的身份验证无关。
    4. BASIC auth,不可能轻松注销。同样的情况 摘要 . 我不确定这是一个值得解决的问题。

    另见 HTTP Basic auth password storage more secure than Digest auth . 我的理解是 摘要 已过期,安全性低于通过HTTPS正确完成的基于表单的身份验证 适当的 正在消化数据库中的密码。