定制摘要式身份验证

  • 我为摘要式身份验证制作了一个Http模块。 在服务器上,每次请求页面时,都会检查是否存在“authenticate”标头。 如果此标题不存在,用户将收到401消息。
  • 在客户端,我使用jQuery插件进行摘要式身份验证。
  • 为了知道我有流动的功能:

  • 用户在两个输入字段中输入用户名和密码(不在浏览器的Http Authentication提示符中)
  • 使用jQuery,我正在对服务器上的某个受保护页面进行ajax调用。 这个ajax调用基于Digest Http协议。 这意味着我使用username,noncecount,clientnonce,MD5哈希密码等来添加身份验证标头。
  • 然后服务器响应200消息:)
  • 如果用户转到另一个页面,它将得到“401访问被拒绝”,因为该请求中没有认证标头。 这就是问题所在。

  • 如果我使用标准摘要协议,那么浏览器会在每个请求中自动添加授权标头,而我没有这个问题。 但是我正在使用这种方式,因为我不知道用户在浏览器Http Authentication对话框中填充凭据的方式。 我们想要我们的自定义对话框。 在jQuery DigestJ插件中,头部被称为'authenticate'而不是'authorization',协议被称为DigestJ而不是Digest。 这样,当服务器响应401消息时,我不会让浏览器的Http对话框输入凭据。 我们不能使用表单身份验证。
  • 我可以用jQuery会话插件在客户端存储用户凭证,但是如何在每个请求上修改Http标头? 我需要添加“身份验证”标题并从会话中插入凭据。

  • 我使用基本的HTTP身份验证来从joomla组件中使用REST Web服务,并且我的用户不必输入任何内容(只需登录一次joomla即可)。 我只抓住已经登录的用户,然后使用CURL将其发送到我的Web服务

        $ch = curl_init();
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //$username and $pass are the vars that will be used for authentication you can get them from your session or a cookie or in my case i got them from joomla JFactory::getUser()->username and JFactory::getUser()->password
            curl_setopt($ch, CURLOPT_USERPWD, JFactory::getUser()->username.':'.JFactory::getUser()->password);
        //here comes the important thing
            curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $response=curl_exec($ch);
    

    另一方面,您只需检查$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']对您的数据库,你就完成了

    if (!isset($_SERVER['PHP_AUTH_USER'])||$_SERVER['PHP_AUTH_USER']==''||!isset($_SERVER['PHP_AUTH_PW'])||$_SERVER['PHP_AUTH_PW']=='') {
        header('WWW-Authenticate: Basic realm="Something"');
        header('HTTP/1.0 401 Unauthorized');
       echo 'You must be a valid user to access this contents';
       exit;
    } else {
           // go to your database check they are valid and return whatever you want to return
    }
    
    链接地址: http://www.djcxy.com/p/22097.html

    上一篇: Custom Digest Authentication

    下一篇: JDBC Realm authentication with single table