为什么Liferay在密码前面加上算法名称?

问题描述

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

{SHA-256}

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

ShibUserPassAuth { RelationalLogin.DBLogin必需debug = true dbDriver =“ com.MysqL.jdbc.Driver” userTable =“ User_” userColumn =“ emailAddress” passColumn =“ password_” dbURL =“ jdbc:MysqL:// MysqL:3306 / lportal” dbUser =“ root” dbPassword =“密码” hashAlgorithm =“ SHA-256”; };

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

有什么想法让Liferay不设置该前缀或让Shibboleth查找该前缀吗?

解决方法

标题中您的问题的答案可能是“因为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表上创建一个View,然后将Shibboleth连接到该View而不是User_表。