【发布时间】:2014-12-16 13:08:34
【问题描述】:
我们在 OpenAM 中使用自定义数据库数据存储。该商店根据我们的 Oracle 数据库对用户进行身份验证。 现在,有许多可能的原因导致身份验证失败。该帐户可能在 Oracle 中被锁定,或者密码可能已过期。 数据存储捕获 SQLException,但如何将原因传播到 OpenAM UI?
我可以从 authenticate() 抛出一个 AuthLoginException,但在到达 AMLoginContext 的途中,它会被包装,并且 AMLoginContext 无论如何都会忽略 AuthLoginExceptionS 的错误代码。含义:AMLoginContext 不会从异常中读取错误码,而是尝试自行判断错误码,通常只是将 AMAuthErrorCode.AUTH_LOGIN_FAILED 置于登录状态。
如何让 UI 显示登录问题的原因?
【问题讨论】:
-
出于安全原因,未显示错误的实际原因,否则会知道,例如帐号存在,密码错误,帐号被锁定
-
好吧,如果用户的密码已经过期,我们需要知道这一点。否则我们将如何提示用户更改密码才能继续应用程序!?如果帐户被锁定,那么让用户重新输入密码也没有意义。
-
您可以扩展 JDBC 身份验证模块并处理密码过期,就像在 LDAP 身份验证模块中所做的那样......,默认的数据存储身份验证模块不打算提供此功能。
标签: openam