使用一次性密码解决方案更安全地验证身份
2009-02-09 10:20:21 来源:WEB开发网OTP 模块包括一个名为 LoginPage.htm 的内置登录窗体。它由以下五个 HTML 元素组成:一个初始为空的错误消息字段,一个用户名字段、一个密码字段、一个提交按钮以及一个名为 hdLoginForm 的隐藏输入字段。
如果调用方已通过身份验证,则模块无需执行进一步操作。继续处理请求。在本演示中,将加载 Default.htm 页面。
如果调用方未通过身份验证,则会调用 IsAuthenticationPost 帮助函数。它将检查请求类型是否为 POST,以及请求窗体是否包含 hdLoginForm 输入字段。如果两个条件都得到确认,则此方法将返回 true。
如果请求是身份验证请求,则调用 TryAuthenticate 帮助函数。从请求上下文中检索用户名和 OTP 值,并将其传递给身份验证 Web 服务的 VerifyOtpCode 方法。如果确认成功,则会将新的加密身份验证 cookie 附加到响应中。然后,将该响应重定向到默认页面 (Default.htm)。要演示这一效果,可先保存用户请求的原始页面,并在身份验证成功之后将用户重定向到该页面。
如果 VerifyOtpCode Web 服务调用失败,请求将被重定向回登录窗体(此时将显示一个错误消息),并且调用帮助函数 ShowLoginForm。此帮助函数从模块的资源部分加载登录页面、设置页面中的错误消息字符串(如果适用),并将登录页面设为对当前请求的响应。然后,它将请求标记为已完成(无论请求的性质如何都会完成这一步)。
身份验证 Web 服务
身份验证 Web 服务负责执行实际的 OTP 身份验证,其方法是确定提供的 OTP 值是否表明命名用户已拥有密钥,。
由于重用底层加密库(此加密库实现了在之前的有关测试 OTP 生成器客户端的章节中所介绍的 OTP 计算),实现 OTP 身份验证 Web 服务将非常简单。该重用形式为对本机 HmacOtpDll.dll 的 GenerateOTP 导出的 P/Invoke 调用。
更多精彩
赞助商链接