注销不适用于DIGEST身份验证

时间:2019-01-28 20:04:34

标签: orbeon

我已经在Orbeon Forms 2018.2.201901010020 CE中安装了Tomcat-8.5.37,并尝试使用用户菜单的新注销按钮-该登录在以前的orbeon版本中已经起作用。
在web.xml的登录部分中指定 FORM 作为身份验证方法,所有操作都可以顺利进行。 但是使用FORM身份验证必须将密码保存为明文,这是避免的事情。
因此,我尝试使用 DIGEST 作为身份验证方法,该方法可以保存加密的密码。
登录有效,并且用户菜单报告已登录的用户。
但是注销不会使会话无效。不再显示orbeon注销页面,而是显示表单运行器主页,并且在用户菜单中,用户仍显示为已登录。
再次单击注销按钮,所有操作都保持不变:显示表单运行器主页,并且用户已经登录。

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从<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>

对于DIGEST身份验证,我在login-config的{​​{1}}中使用了 DIGEST ,并将 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> 。这不是 fr 页,因此无需输入密码即可显示。
然后,我选择了书架应用程序。这是一个fr页面,因此会弹出一个用于身份验证的页面。
通过FORM身份验证,将显示orbeon登录页面: orbeon login
使用DIGEST身份验证时,将显示tomcat登录页面:
tomcat login

在两种情况下,成功登录后,都会显示书架摘要页面,并且用户菜单显示已登录的用户。
bookshelf summary page with user menu


在DIGEST身份验证中,单击注销按钮后,下一个显示的页面是表单运行器主页,而不是orbeon注销页面。用户保持登录状态,用户名显示在用户菜单中。
再次单击注销按钮,所有操作均保持不变:显示表单运行器主页,并且用户已经登录:
form runner home page after logout


附近两个orbeon日志的链接:
用于 FORM 身份验证orbeon log form authentication
的orbeon.log 用于 DIGEST 身份验证orbeon log DIGEST authentication

的orbeon.log

NB。在orbeon DIGEST日志中,我看到了管道破裂的错误,在orbeon FORM日志中,我没有看到此错误。


为了使注销也可以与DIGEST身份验证一起使用,我需要更改什么?

非常感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

简而言之,我的建议:

  1. 请勿在{{1​​}}中使用DIGEST。使用web.xml。大多数Web应用程序都使用某种基于表单的身份验证。
  2. 确保使用HTTPS,而不是纯HTTP。
  3. 确保使用不会在数据库中明文存储密码的安全领域。这与是否使用基于表单的身份验证无关。
  4. 使用FORM身份验证,无法轻松注销。 BASIC可能也是如此。我不确定这是一个值得解决的问题。

另请参见HTTP Basic auth password storage more secure than Digest auth。我的理解是,DIGEST已过时,并且比通过HTTPS正确完成基于表单的基于身份验证的安全性要低,而正确会提取数据库中的密码。