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

Why does Liferay prefix password with algorithm name?

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

{SHA-256}

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

ShibUserPassAuth{ relationalLogin.DBLogin 需要 debug=true dbDriver="com.mysql.jdbc.Driver" userTable="用户_" userColumn="电子邮件地址" passColumn="密码_" dbURL="jdbc:mysql://mysql:3306/lportal" dbUser="root" dbPassword="密码" hashAlgorithm="SHA-256"; };

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

有什么想法可以让 Liferay 不设置这个前缀或让 Shibboleth 寻找这个前缀来解决这个问题吗?

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

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

我发现 an old discussion 让我相信您可以为 Shibboleth 数据库连接编写一个查询模板(从链接的讨论中复制的示例以延长寿命):

<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 字符串操作函数来截断前面的哈希算法字符串。

另一个想法是在数据库 table 上创建一个包含那些 SQL 字符串操作方法的视图,然后将 Shibboleth 连接到该视图而不是 User_ table.