为什么 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.
我查看了 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.