none
关于概要验证中取得密码的问题 RRS feed

  • 问题

  • 大家好:

        我需要自己实现用户登陆的摘要验证过程,用户名和密码存储在IIS服务器的AD中。

        我的实现过程大致是这样:由于在这个过程中客户输入的密码是以{username:pwd:realm}的形式经过MD5加密之后传送的,所以我需要根据用户名在AD中查找到相应的密码,然后以相同方式加密,之后与发送过来的加密信息做对比,如果相同就验证通过。但是问题就在于我无法在AD中通过用户名来取得密码,请问有什么方法吗?还是说我的实现摘要验证的方法根本就不对?如果这样话应该怎么实现呢?

    期盼各位的回复,谢谢!
    2009年8月19日 13:08

答案

  • 您好,个人观点供参考:
    我从1、msdn中查到关于管理AD用户密码的方式只是修改密码。请参考:http://msdn.microsoft.com/zh-cn/library/ms180915(VS.80).aspx
          2、当我使用windows超级管理员时也只是能修改密码,不能获取密码。
          以上两点,我认为无法取得AD的密码,估计是为了安全保护。
          所以我认为采用AD,则只有通过服务端先将加密的密码解密,然后通过代码调用登入的方法来验证是否密码正确。采用模拟的方法,请参考:http://www.yaosansi.com/post/1264.html

          然而我的印象中md5的加密是无法反算的。所以好像陷入死胡同了。
         个人建议:1、采用数据库来存放密码
                    或2、使用一个可以反算的算法。(我记得有的算法可以自己添加进一些标示码,这样反算也是安全的,因为标示码只有您知道)
    • 已标记为答案 skipsol 2009年8月21日 15:04
    2009年8月19日 13:49
    版主

全部回复

  • 您好,个人观点供参考:
    我从1、msdn中查到关于管理AD用户密码的方式只是修改密码。请参考:http://msdn.microsoft.com/zh-cn/library/ms180915(VS.80).aspx
          2、当我使用windows超级管理员时也只是能修改密码,不能获取密码。
          以上两点,我认为无法取得AD的密码,估计是为了安全保护。
          所以我认为采用AD,则只有通过服务端先将加密的密码解密,然后通过代码调用登入的方法来验证是否密码正确。采用模拟的方法,请参考:http://www.yaosansi.com/post/1264.html

          然而我的印象中md5的加密是无法反算的。所以好像陷入死胡同了。
         个人建议:1、采用数据库来存放密码
                    或2、使用一个可以反算的算法。(我记得有的算法可以自己添加进一些标示码,这样反算也是安全的,因为标示码只有您知道)
    • 已标记为答案 skipsol 2009年8月21日 15:04
    2009年8月19日 13:49
    版主
  • To Jiyuan:

        您好。谢谢您的答复。
        关于您提出的两点建议:
        1. 用户信息已经存在于AD中了,如果批量复制到数据库中的话工作量太大,而且不利于信息的集中管理(与其他系统共用用户信息)。
        2. 必须以弹出windows登陆框的形式来输入用户名和密码而不是自定义的登陆界面,而windows登陆框貌似只能以MD5加密的方式传输用户信息吧?(或者可以指定算法吗?那浏览器发送的HttpHeader将以什么方式来组织这些信息,我又该怎么从其中提取信息呢?不太明白)

        以上是我的想法,如果有不对的地方请指正。

        plus:我对您提出的其他加密算法很感兴趣,能否提供一下相关内容的地址,我好学习学习:)


     
    • 已编辑 skipsol 2009年8月19日 14:23
    2009年8月19日 14:21
  • 您好,您是指IIS中集成验证时,弹出的登入框吗?我还以为是您自己用Activex编写的登入框。
    如果是集成验证的,那么系统会自动验证,并且您能通过HttpContext.Current.User.Identity.IsAuthenticated来获取是否已验证。
    为什么要自己写验证代码?

    关于算法我也不擅长,只是之前好像有看到过,是在com下的一个组件,已记不清了。
    感觉wcf的rank.Xu Lei版主有研究,您可以问问他。
    2009年8月19日 14:51
    版主
  • To Jiyuan:

        您好。之所以自己写验证代码是因为需求中有多域用户验证和域黑名单的功能,但是不清楚是否能通过简单的配置实现,所以就采取的服务器端配置成匿名登录,然后通过代码自己做验证控制的方式。那个登陆框也是代码控制弹出的。其实我也感觉这种方式不太好,请问有什么建议么?
    2009年8月20日 2:03
  • 您好,我只处理过单域的,感觉上能通过配置域间的信任关系来解决多域用户验证的问题。
    手边没有环境,无法确定,您可以尝试测试一下。
    2009年8月20日 3:49
    版主