【问题标题】:Why does Liferay prefix password with algorithm name?Liferay 为什么要在密码前加上算法名?
【发布时间】:2021-02-22 22:38:44
【问题描述】:

我查看了liferay中的User_表,每个新密码都有一个前缀:

{SHA-256}

我正在尝试设置 Shibboleth IDP 以使用 User_ 表进行身份验证,如下所示:

ShibUserPassAuth { 关系登录.DBLogin 需要 debug=true dbDriver="com.mysql.jdbc.Driver" userTable="用户_" userColumn="emailAddress" passColumn="密码_" dbURL="jdbc:mysql://mysql:3306/lportal" dbUser="根" dbPassword="密码" hashAlgorithm="SHA-256"; };

但是我的身份验证失败,因为密码不匹配。如果我进入数据库手动更新密码,那么它可以工作。

有什么想法可以通过让 Liferay 不设置此前缀或让 Shibboleth 查找此前缀来解决此问题?

【问题讨论】:

    标签: liferay-7 shibboleth


    【解决方案1】:

    标题中您的问题的答案可能是“因为 Liferay 的历史和升级兼容性”。我猜他们不想改变User_ 表的架构,但需要一种方法来标记散列算法。

    我没有你的实际问题的答案,但有两个想法:

    我发现 an old discussion 让我相信您可以为 Shibboleth DB 连接编写查询模板(示例从链接讨论中复制以实现长寿):

    <resolver:DataConnector id="mySIS" xsi:type="RelationalDatabase"
    xmlns="urn:mace:shibboleth:2.0:resolver:dc">
    <ApplicationManagedConnection jdbcDriver="com.mysql.jdbc.Driver"
    jdbcURL="jdbc:mysql://localhost:3306/userDB" jdbcUserName="root"
    jdbcPassword="root" />
    <QueryTemplate>
    <![CDATA[
    SELECT * FROM user WHERE usr_login =
    '$requestContext.principalName'
    ]]>
    </QueryTemplate>
    
    <Column columnName="usr_login" attributeID="uid" />
    <Column columnName="first_name" attributeID="displayname" />
    </resolver:DataConnector> 
    

    这个例子看起来你可以在查询中使用 SQL 字符串操作函数来截断前面的哈希算法字符串。

    另一个想法是在包含这些 SQL 字符串操作方法的 DB 表上创建一个视图,然后将 Shibboleth 连接到该视图而不是 User_ 表。

    【讨论】:

    • 使用视图是一个非常好的建议。这是一个有帮助的简单视图:CREATE VIEW V_User_No_Hash AS select emailAddress, SUBSTRING_INDEX(password_,'{SHA-256}', -1) as password_ FROM lportal.User_;
    • @YogeshChawla 很高兴它有帮助。如果您的 Liferay 安装切换到例如SHA-512。您可以在包括第一个右大括号之前切断任何内容,因为到目前为止我看到的任何正确的哈希字符串都不包含大括号。然后你只需要希望 Shibboleth 能够应对尝试多种散列算法。 (如果您仍然从数据库中的古老 Liferay 实例中获得明文密码,请不要这样做,因为这些密码可能包含大括号!)
    猜你喜欢
    • 2012-01-04
    • 2013-04-19
    • 2011-03-13
    • 2014-01-05
    • 2014-09-05
    • 2016-12-18
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多