• 技术文章 >后端开发 >php教程

    编写php应用程序实现摘要式身份验证的方法详解_php技巧

    2016-05-17 09:02:49原创392
    通基本身份认证一样,也可以使用PHP网页处理HTTP请求报头字段来匹配摘要式身份验证信息。例如下边的代码使用header()函数要求客户端使用Digest验证,它在HTTP消息报头中增加了一个WWW-Authenticate字段:
    header('WWW-Authenticate:Digest Realm="MyRealm",nonce="47alf7cf25ce7",algorithm=MD5,qop="auth"');
    --------------------------------------------------------------------------------
    下边代码描述的是一个使用摘要式身份验证的网页(首先取消Apache验证配置)。
    复制代码 代码如下:

    $realm="MyRealm";
    //如果没有验证信息,则发送报头要求浏览器使用摘要式身份验证
    if(!isset($_SERVER['PHP_AUTH_DIGEST'])){
    header("WWW-Authenticate:Digest Realm=/"$realm/",nonce=/"".uniqid()."//m.sbmmt.com/m/",algorithm=MD5,qop=/"auth/"");
    header("HTTP/1.0 401 Unauthorization Required");
    echo "账号/密码错误!";
    exit;
    }else{
    //使用函数http_digest_parse解析验证信息
    $data=http_digest_parse($_SERVER["PHP_AUTH_DIGEST"]);
    if(!$data){
    header("HTTP/1.0 401 Unauthorization Required");
    echo "账号/密码错误!";
    exit;
    }else{
    //根据HTTP协议,自己构建一个response值
    $A1=md5('admin:'.$realm.':password');
    $A2=md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
    $valid_response=
    md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);}
    //将自己构建的response值与浏览器构建并发送过来的response值对比,如果相同那么就证明用户名和密码输入是正确的
    if($data['response']==$valid_response){
    echo "验证通过!";
    }else{
    header("HTTP/1.0 401 Unauthorization Required");
    echo("账号/密码错误!");
    exit;
    }
    }
    function http_digest_parse($digest_str){
    $needed_parts=array('nonce'=>1,'nc'=>1,'cnonce'=>1,'qop'=>1,'username'=>1,'uri'=>1,'response'=>1);
    //使用正则表达式解析Authorization报头的内容
    preg_match_all('@(/w+)=([/'"]?)([a-zA-Z0-9=.//_-]+)/2@',$digest_str,$result,PREG_SET_ORDER);
    //将结果填充$data数组,并返回
    $data=array();
    foreach($result as $m){
    $data[$m[1]]=$m[3];
    unset($needed_parts[$m[1]]);
    }
    return $needed_parts?false:$data;
    }
    ?>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 验证身份证
    上一篇:探讨如何把session存入数据库_php技巧 下一篇:基于PHP对XML的操作详解_php技巧
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• 2022最新浅析PHP特性、内核及架构• 教你创建虚拟主机并运行php项目(phpstudy + wamp)• 一文详细PHP模板引擎的原理(附代码示例)• PHP图像处理开发库_PHP• php命名空间学习详解_PHP
    1/1

    PHP中文网