读者记录密码安全策略 - DigitalPlatform/dp2 GitHub Wiki
dp2 系统的读者记录,是一种 XML 格式的记录,每条记录存储了关于一个读者的各种信息。
读者记录根元素下的 password 元素存储了读者的密码。这个密码被用于读者登录 dp2OPAC,或者使用内务前端(没错,读者也可以用内务前端进行一些操作)。
为了安全考虑,password 元素中存储的是 Hash 以后的密码字符串,不是明码。在 dp2library 验证密码的时候,实际上是用前端发来的密码明码,Hash 运算以后,和读者记录中的 password 元素内容进行比较来判断密码是否匹配的。
除了专门修改读者记录密码的 API(changeReaderPassword()),一般修改读者记录的 API 是不会修改 password 元素的。或者说,前端即便发来包含了 password 元素的读者记录,dp2library 在真正保存到数据库以前,是要对前端发来的 password 元素进行过滤的。
当读者记录被创建的时候,如果(前端发来的) dateOfBirth 元素中包含了正确的出生日期信息,那么 dp2library 会自动将出生日期的 8 位数字形态(例如 20160101)用于初始的 password 元素内容,即,出生日期被当作了初始密码(在没有配置读者密码健壮性参数的情况下)。
如果创建读者记录的时候,没有给出 dateOfBirth 元素,那么读者记录就被创建为具有一个随机字符串的密码;即便后面再修改这条读者记录并且修改的读者记录中包含了合规的 dateOfBirth 元素,dp2library 也不会自动修改 password 元素了。这时只能重置密码了。
如果创建读者记录的时候,前端给出的 dataOfBirth 元素内容不合法,则这个个创建记录的操作会报错,读者记录不会被创建。
读者如何重置密码
读者重置密码的方式有多种:
1.让馆员通过内务-【修改密码窗】-【读者】界面,直接修改密码。这种处理方式下,读者的密码就被操作修改的馆员所知道。
2.让馆员通过内务-【修改密码窗】-【读者找回密码】界面,输入读者的证条码、姓名和登记到dp2系统的手机号码,点【获得临时密码(直接发送到读者手机)】,让系统发送临时密码到读者手机。读者先通过临时密码绑定opac或者公众号后,再修改密码。
3.读者通过公众号或者opac的找回密码功能,输入个人信息和登记到dp2系统的手机号后,获得临时密码,然后先通过临时密码绑定opac或者公众号后,再修改密码。
以上第2、3种方式需要系统配置了dp2capo并开通公众号功能后,才能使用。如果要采用opac找回密码,那么opac中登录对话框要预先配置“找回密码”锚点。