2

我有一个具有经典架构的应用程序:UI <--> WCF <--> 业务层 <--> 数据层 <--> 数据库。对于 WCF 服务,我使用用户名/密码身份验证。这些用户名和密码存储在应用程序数据库中。密码配置为定期过期(业务要求)。

我有密码过期的问题。我在我的WCF服务中做了一个操作,负责修改用户密码,但是密码过期后我无法访问,因为认证失败!

我应该如何处理?我是否应该为密码修改创建一个具有特殊身份验证的特殊端点(例如,如果密码是正确的 eben 尽管它已过期,则允许访问)?对于这样一个“小”问题,这听起来像是一个沉重的解决方案。

编辑:也许我应该添加更多上下文。在实现 UserNamePasswordValidator 的类中进行验证。在 validate 方法中,我检查用户是否被锁定、密码是否错误、是否已达到最大登录尝试次数(如果是,我也会锁定用户)以及密码是否已过期。如果其中之一为真,则身份验证失败。也许这不是最好的设计...

4

3 回答 3

1

您没有指定如何处理应用程序中的权限,但应允许密码已过期的用户登录,但只能获得更改密码的权限。我们在类似情况下所做的是允许用户通过 UsernamePasswordValidator,但不授予他在 AuthorizationPolicy 中的任何权限。由于我们所有的功能都会检查某些权限,用户不能做任何事情,除了更改他的密码。

于 2012-02-27T20:50:10.087 回答
1

密码过期是授权问题,而不是身份验证问题。如果密码已过期,您应该像往常一样对用户进行身份验证,但您应该暂时无法通过所有授权检查,除了允许用户更改密码的授权检查。

注意:认证方法不需要更改代码,因为在完成认证检查时,旧密码仍然有效,因此用户仍然被认证。

于 2012-02-27T20:57:39.687 回答
1

每当验证密码时,首先检查密码是否过期。如果密码过期为真,则向客户端发送带有特定错误代码/错误消息的异常,说明密码已过期。在客户端检查此类错误代码的服务响应并将用户重定向到更改密码页面。

于 2011-04-20T11:49:47.290 回答