HTTP Basic Authentication协议 

  1. ngx_http_auth_basic_module模块使用HTTP Basic Authentication协议来验证用户名和密码,从而实现对资源的访问限制。

  2. HTTP Basic Authentication协议相关

    • 客户端请求web服务器时,如果返回401Unauthorized表示需要身份认证,响应头中会包含WWW-Authenticate字段,例如WWW-Authenticate: Basic realm="closed site"realm表示认证域,浏览器收到这个响应后会弹出用户名密码输入框。

    • 客户端发送认证信息,在请求头中Authorization字段中传入用户名和密码。格式为Authorization:Basic Base64(用户名:密码)

    • HTTP Basic Authentication认证通过以后浏览器会缓存认证信息,下次访问时能够看到浏览器会在请求中自动加上Authorization头信息。

auth_basic指令 

  1. 作用:启用HTTP Basic Authentication认证。

  2. 语法:auth_basic string | off;

    • auth_basic string表示启用HTTP Basic Authentication认证。

    • auth_basic off取消继承自上一层的auth_basic指令的设置。

  3. 默认值:auth_basic off;

  4. 作用域:http, server, location, limit_except

auth_basic_user_file指令 

1. 作用:配置用户名密码文件。

2. 语法:auth_basic_user_file file;  指定认证文件,文件格式为:

user1:password1
user2:password2

3. file参数中可以包含变量。

4. 配置文件中的密码可以为以下几种格式:

  • crypt()函数加密,可以通过Apache HTTP Server的htpasswd工具生成,或openssl passwd命令生成。

    • htpasswd方式:

      • 安装:sudo yum install httpd-tools

      • 加密:htpasswd -s conf/htpasswd user1  # 使用SHA1算法生成user1用户的密码并更新到conf/htpasswd文件中

    • openssl方式:

      • 系统一般都预装了openssl

      • openssl passwd -6 -salt "bKaMt2" 3edc4rfv # 使用SHA512算法对3edc4rfv加密,生成后的密码手动加入到htpasswd文件中,格式为:用户名:加密后的密码

  • htpasswd或openssl passwd工具计算的MD5值。

    • htpasswd:htpasswd -m -s conf/htpasswd user5 # MD5算法配置user5用户的密码并更新到conf/htpasswd文件中

    • openssl方式:openssl passwd -1 34erdfcv # MD5算法对3edc4rfv加密,生成后的密码手动加入到conf/htpasswd文件中,格式为:用户名:加密后的密码

  • RFC 2307定义的{scheme}data格式。scheme为加密方案,可以为PLAIN、SHA、SSHAdata为Base64编码的数据。

      • PLAIN方式加密举例:PLAIN是明文方式,不推荐,格式为:user7:{PLAIN}8ik7uj,其中user7为用户名,8ik7uj为密码。

      • SHA方式加密举例:printf "123qwe" | openssl dgst -sha1 -binary | base64  # 对123qwe加密,生成后手动加入到htpasswd文件中,格式为:用户名:{SHA}加密后的密码

      • SSHA方式加密举例:

        • 安装:sudo yum install openldap-servers openldap-clients

        • 加密 :slappasswd -h "{SSHA}" -s "3edc3edc" # 对3edc3edc加密,生成后手动加入到htpasswd文件中,格式为:用户名:{SSHA}加密后的密码

    测试 

    1. nginx配置
      location /test {
         auth_basic "closed site";
         auth_basic_user_file /usr/local/nginx/conf/htpasswd;
         alias /usr/local/nginx/html;
      }
      
    2. htpasswd文件样例 

    3. 测试
      curl --request GET \
        --url http://xxx.xxx.xxx.xxx/test/index.html \
        --header 'Accept: */*' \
        --header 'Accept-Encoding: gzip, deflate, br' \
        --header 'Authorization: Basic dXNlcjk6M2VkYzNlZGM=' \
        --header 'Connection: keep-alive' \
        --header 'User-Agent: PostmanRuntime-ApipostRuntime/1.1.0'
      

    Logo

    汇聚全球AI编程工具,助力开发者即刻编程。

    更多推荐