Basic认证

作者: Gaolex | 来源:发表于2016-11-07 10:29 被阅读671次

    Basic认证是客户端与服务器进行请求时,允许通过用户名和密码实现的一种身份认证方式

    如果一个页面需要Basic认证,它会检查请求报文头中的Authorization字段的内容,该字段的值由认证方式和加密值构成,如下所示:

    >GET/HTTP/1.1
    >Authorization: Basic dXNlcjpwYXNz
    >User-Agent:curl/7.24.0 (x86_ 64-apple一darwin12.0) libcurl/7.24.0 OpenSSL/0.g.8r zlib/1.2.5
    >Host:www.baidu.com
    >Accept:*/*
    
    

    在Basic认证中,它会将用户和密码部分组合:"username"+":"+"password"。然后进行Base64编码,如下所示:

    var encode=function(username,password){
    return new Buffer(username+’:’+password).toString(’base64');
    };
    

    如果用户首次访问该网页,URL地址中也没携带认证内容,那么浏览器会响应一个401未授权的状态码,如下所示:

    function (req, res){
      var auth = req.headers[’authorization'] || ' ';
      var parts = auth.split(' ');
      var method = parts[0] ||' ';//Basic
      var encoded = parts[1] ||' ';//dXNlcjpwYXNz
      var decoded = new Buffer(encoded,’base64').toString(’ut仁8').split(":”);
      var user = decoded[0];//user
      var pass = decoded[1];//pass
      if(!checkUser(user, pass)){
        res.setHeader('WWW-Authenticate',’Basic realm="Secure Area"’);
        res.writeHead(401);
        res.end();
      }else{
        handle(req, res);
      }
    }
    

    在上面的代码中,响应头中的WWW-Authenticate字段告知浏览器采用什么样的认证和加密方式。一般而言,未认证的情况下,浏览器会弹出对话框进行交互式提交认证信息.

    浏览器弹出的交互式提交认证信息的对话框

    当认证通过,服务器端响应200状态码之后,浏览器会保存用户名和密码口令,在后续的请求中都携带上Authorization信息。

    虽然经过Base64加密后在网络中传送,但是这几乎是明文,十分危险,一般只有在HTTPS情况下使用。也可加入服务器端随机数来保护认证过程

    参考文献:

    相关文章

      网友评论

        本文标题:Basic认证

        本文链接:https://www.haomeiwen.com/subject/uttouttx.html