我要求在WSO2 - IS中设置密码历史记录限制,即如果我当前的密码是" Abc123",并且如果我想用" Abc123"再次,它不应该接受。
如果我将密码历史记录限制设置为" 3",则新密码应与为该特定帐户提供的最后3个密码不同。
请分享您对此的见解并帮助我完成任务。
答案 0 :(得分:1)
如果您使用LDAP作为用户存储,那么您可以在其中应用密码策略。您可以在LDAP中分配密码历史记录计数。
如果你想在WSO2 IS本身做,那么你可能需要写一个custom password policy extension
答案 1 :(得分:1)
实际上,WSO2-IS不支持开箱即用的密码历史记录控制。这是当前实现中的限制,因为它始终使用用户存储的超级管理员凭据连接到用户存储。最好的选择是您可以编写自定义侦听器(扩展名)并将其与Identity Server一起插入。
Listener是扩展用户核心功能的扩展。可以使用用户核心插入任意数量的侦听器,并逐个调用它们。通过使用监听器,我们不会覆盖用户存储实现,这很好,因为我们没有自定义现有的实现。 让我们看看它是如何工作的。
每次调用用户核心方法时,都会调用使用该方法注册的所有侦听器。可以在调用实际方法之前或之后注册监听器。让我们举个例子;在用户核心中,有一种名为“addUser()”的方法。在Identity Server中创建用户时,将调用“addUser()”方法。您可以在实际执行“addUser()”方法之前注册侦听器,还可以在实际执行“addUser()”方法后注册侦听器。 “addUser()”方法可以看作如下。
addUser(){
preAddUser(); //你可以使用监听器实现这个 actualAddUser();
postAddUser(); //你可以使用监听器实现这个 }
可以根据需要自定义“preAddUser()”和“postAddUser()”方法。这意味着,您可以在添加用户之前或添加用户之后执行一些自定义操作。用户核心中的所有方法都已实现如上。这意味着您可以在...之前和之后自定义它们。
让我们采取以下简单的方案。
当用户通过LDAP进行身份验证时,需要将经过身份验证的时间添加为用户的属性。 因此,我们需要在成功进行用户身份验证后编写一些自定义代码。以下是此自定义侦听器实现。实际用户身份验证完成后,将调用“doPostAuthenticate()”方法。
package org.soasecurity.user.mgt.custom.extension;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.user.core.UserStoreException;
import org.wso2.carbon.user.core.UserStoreManager;
import org.wso2.carbon.user.core.common.AbstractUserOperationEventListener;
/ **
*
* /
公共类MyUserMgtCustomExtension扩展AbstractUserOperationEventListener {
private static Log log = LogFactory.getLog(MyUserMgtCustomExtension.class);
@覆盖
public int getExecutionOrderId(){
返回9883;
}
@覆盖
public boolean doPreAuthenticate(String userName,Object credential, UserStoreManager userStoreManager)抛出UserStoreException {
//只记录
log.info("在使用用户存储进行身份验证之前调用doPreAuthenticate方法");
返回true;
}
@覆盖
public boolean doPostAuthenticate(String userName,boolean authenticated,UserStoreManager userStoreManager)抛出UserStoreException {
//只记录
log.info(" doPreAuthenticate方法在用user store&#34进行身份验证后调用;);
//自定义逻辑
//检查用户是否已通过身份验证
if(authenticated){
//将用户属性保留到用户存储中
//"http://wso2.org/claims/lastlogontime"
是声明uri,表示LDAP属性
//有关索赔管理的详细信息,请点击http://soasecurity.org/2012/05/02/claim-management-with-wso2-identity-server/ userStoreManager.setUserClaimValue(userName," http://wso2.org/claims/lastlogontime", Long.toString(System.currentTimeMillis()),null);
}
返回true;
} }
同样,您可以为用户核心的任何方法添加自定义扩展。
在此,我想注意以下事项。
“getExecutionOrderId()”可以返回任何随机值。当身份服务器中有多个侦听器并且您需要考虑它们的执行顺序时,这很重要
所有方法都返回布尔值值。无论您是否要执行下一个侦听器,都会提到此值。
让我们看看配置自定义实现的步骤是什么。
步骤1。监听器被注册为OSGI组件。因此,您需要在OSGI框架中注册此类。你可以通过这个完整的项目。
第2步。将OSGI捆绑文件复制到 IS_HOME / repository / components / dropins 目录。
第3步。重启服务器。