如何在WCF服务中处理密码过期

时间:2011-04-20 08:24:52

标签: wcf change-password

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

我遇到密码过期问题。我在我的WCF服务中进行了一项操作,该服务负责修改用户密码,但是当密码过期时我无法访问它,因为身份验证失败了!

我应该如何处理?我是否应该为密码修改创建一个带有特殊身份验证的特殊端点(如果密码是正确的,虽然它已过期,但是容忍访问权限)?对于这样一个“小”的问题,这听起来像是一个沉重的解决方案。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

密码到期是授权问题,而不是身份验证。如果密码已过期,您应该正常对用户进行身份验证,但除了允许用户更改密码的权限之外,您应该暂时失败所有授权检查。

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