扩展WSO2 Identity Server JDBCUserStoreManager以适应外部用户数据库

扩展WSO2 Identity Server JDBCUserStoreManager以适应外部用户数据库,jdbc,wso2,identity,user-management,Jdbc,Wso2,Identity,User Management,我们需要根据现有的外部数据库对部署在WSO2应用服务器中的web应用程序的用户进行身份验证。我们正在为此尝试使用WSO2 Identity Server 我们包含用户的db表有两列,这两列使用户名唯一,即clientid和usercode。i、 e.usercode本身不是唯一的,但clientid+usercode是唯一的。我们的密码也用PBKDF2加了盐。因此,我扩展了JDBCUserStoreManager以与我们的数据库通信,并能够在PBKDF2中存储和检索密码 但是我不知道如何从登录页

我们需要根据现有的外部数据库对部署在WSO2应用服务器中的web应用程序的用户进行身份验证。我们正在为此尝试使用WSO2 Identity Server

我们包含用户的db表有两列,这两列使用户名唯一,即clientid和usercode。i、 e.usercode本身不是唯一的,但clientid+usercode是唯一的。我们的密码也用PBKDF2加了盐。因此,我扩展了JDBCUserStoreManager以与我们的数据库通信,并能够在PBKDF2中存储和检索密码

但是我不知道如何从登录页面获取客户端id到扩展的JDBCUserStoreManager。i、 e如何从自定义JDBCUserStoreManager中访问存储在用户会话中的clientid?如果我可以从那里的会话中获取clientid,我就可以在sql查询中使用它来执行所需的操作


非常感谢您提供的任何帮助。

您可以在登录页面中输入组合“clientid+usercode”作为用户名。然后,验证器将该组合作为用户名传递给自定义userstore管理器的doAuthenticate()方法。在这里,您可以从用户名中拆分客户端id和用户代码

嗨,谢谢你的回答。是的,这将用于身份验证。但是,由于我们在几乎所有其他与角色和声明等相关的方法中都需要clientid,我们想知道是否有更好的方法来实现这一点?也许可以扩展验证器?目前我不知道这是哪个类,也不知道导致StoreManager方法被调用的调用链。关于这个的任何进一步的信息都非常好。嗨,你也可以创建你自己的验证器和插件。但是,即使使用默认验证器,您也可以用更少的工作完成这项工作,因为在成功进行身份验证之后,已验证的用户用户名将被放入会话中。因此,在您的情况下,会话中的用户名是“clientid+usercode”。因此,在UserManager的其他操作中,如getRoles、getClaims等,您可以使用“clienid+usercode”作为用户名。因此,在这些方法中,您总是知道如何从用户名中获取userid。