65.9K
CodeProject 正在变化。 阅读更多。
Home

Google 密码强度 API

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.45/5 (16投票s)

2007年6月18日

CPOL

3分钟阅读

viewsIcon

197571

downloadIcon

5151

一个用于 Google 密码强度 API 的 ASP.NET 控件。

Screenshot - GooglePasswordStrength.gif

引言

您有 iGoogle 帐户吗?如果您像世界其他使用互联网的人一样,您肯定有,这也意味着您已经见过非常酷(而且有用)的“密码强度”控件。

此控件拥有一个非常智能的 API 来确定您输入的密码是否足够安全。之所以说是“智能”,因为它不仅仅检查密码长度是否大于六个字符;例如,密码“aaaaaaaaaaaa”会被评为“弱”、“my password”为“好”,而“grty3657DF?£hr4”则为(您猜对了!)“强”。

最大的秘密是,这实际上是 Google 的一个公共 API,您可以将密码传递给它,它会返回密码强度等级,从 1(最不安全)到 4(最安全)。您可以在这里查看。

但是,该控件没有界面,而且 Google 没有公开宣传它。

背景

当我在当前正在构建的网站上发现对这种控件的需求时,我首先查看了Microsoft AJAX Toolkit。起初,这效果很好;但是,我觉得使用的算法不如 Google 的算法强大,而且我一直收到该控件的 JavaScript 错误。

于是有了这个控件。

使用代码

最简单的方法是添加对GooglePasswordStrength.dll的引用,然后在web.config中添加一个部分。

<pages> 
    <controls> 
        <add tagPrefix="google" namespace="GooglePasswordStrength" 
             assembly="GooglePasswordStrength"/> 
    </controls> 
</pages>

然后,将控件添加到您的页面,并将其附加到一个asp:TextBox

<table> 
    <tr> 
        <td><asp:TextBox ID="txtPassword" runat="server" /></td>
        <td><google:PasswordStrength ID="PS" 
                TargetControlID="txtPassword" 
                CssClass="password" runat="server" /></td>
    </tr> 
</table>

关注点

该控件利用 AJAX,但不依赖任何第三方 AJAX 库。但是,如果您的应用程序使用Microsoft AJAX 库,则该控件会调用 Rick Strahl 编写的客户端脚本代理来处理所有客户端脚本。

已知问题

XMLHttpRequest直接调用 Google 密码强度 API,因此某些浏览器设置可能会导致“权限被拒绝”错误。这是因为XMLHttpRequest正在调用本地域之外的页面。在 Microsoft Internet Explorer 中,您可以在安全自定义级别设置下更改此设置。查找“杂项 -> 跨域访问数据源”。

要获得更强大、更永久的解决方案,您需要将调用更改为同一域上的页面,并从那里对 Google API 进行WebRequest调用。

更新

  1. GooglePasswordStrength.Web项目中,创建一个名为GetPassword.aspx的新 Web 窗体。
  2. GetPassword.aspx中,删除所有行,只保留@Page指令行。
  3. 打开GetPassword.aspx.cs
  4. Page_Load方法中,添加以下代码
  5. string passwd = Request.QueryString["Passwd"];
    
    string GUrl = string.Format("https://www.google.com/" + 
                  "accounts/RatePassword?Passwd={0}", passwd);
    
    WebRequest webRequest = WebRequest.Create(GUrl);
    WebResponse webResponse = webRequest.GetResponse();
    StreamReader reader = new StreamReader(webResponse.GetResponseStream());
    
    Response.Clear();
    Response.Output.Write(reader.ReadToEnd());
    Response.End();
  6. 打开PasswordStrength.js
  7. 在第 76 行,有xmlHttpObj.open方法。将"https://www.google.com/accounts/RatePassword?Passwd="替换为"GetPassword.aspx?Passwd="
  8. 此外,在PasswordStrength.js文件中,将所有"innerText"实例替换为"innerHTML"(我后来发现innerText仅适用于 IE)。

现在,XmlHttpRequestObject将调用同一域上的文件,您将不再收到安全错误。

历史

  • 2007 年 11 月 - 添加了第二个演示,它使用了上面更新的代码。
© . All rights reserved.