欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx HTTP Basic Authentication 小记

程序员文章站 2024-03-13 20:55:16
...

1. HTTP Basic Authentication

HTTP Basic authentication是最常用的HTTP认证方案,简单、实用,其认证方式适合于一些不是特别重要的,但是又不愿意直接暴露到公网的网站内容。

nginx的 ngx_http_auth_basic_module 模块通过HTTP Basic authentication协议可以验证用户输入的账号密码,在验证通过的情况下才能访问网站内容。nginx的官方文档其实已经比较详细了,这里抱着学习的态度再走一下流程,补充一些文档里不够详细的内容

2. 使用场景

我的后端项目通过apiDoc非常轻松地实现了api文档,当然这个api文档是随着后端项目一期部署到了线上,其中的有些内容还是比较敏感的,不便于直接暴露,做权限认证的话,如果接入sso,还要更改api文档代码,比较麻烦,所以我就直接借助nginx的baisc auth直接做权限认证了。

3. 基本配置

由于ngx_http_auth_basic_module 模块在nginx安装的时候,就默认安装了,所以无需单独安装,直接在nginx配置文件里进行配置就可以了,以下是示例配置:

location / {
    auth_basic           "test website";
    auth_basic_user_file conf/htpasswd;
}

3.1. auth_basic

这个指令告诉nginx是否开启basic认证,默认是 off ,所以我们需要手动打开,能使用的上下文有: httpserverlocationlimit_except ,其接收参数为 string 字符串或者 off 。当为 off 时,会取消从上一级配置继承的auth_basic属性。比如,我的server直接开启了auth_basic:

server {
    # 其它配置
    auth_basic           "test website";
    auth_basic_user_file conf/htpasswd;
    location /a {
        auth_basic           off;
        auth_basic_user_file conf/test.htpasswd;
    }
    location /b {
        # 其它配置
    }
}

那么正常情况下,下面的所有同级location都会被继承这个配置,也就是都会开启认证。而我将 location /a 的auth_basic设置为了off,所以当访问到 /b 时,就不会触发认证了,具体使用情况看个人需求。当auth_basic设置为string是仅仅只是用于认证弹窗的标题展示。

3.2. auth_basic_user_file

这个指令用于指定认证校验的文件,使用上下文同auth_basic,其对应的文件格式应该如下:

# comment
name1:password1
name2:password2:comment
name3:password3

这里需要注意的是,校验文件的密码只支持以下三种类型(翻译水平有限,最好参看原文):

  • 通过 crypt() 函数加密:比如使用Apache HTTP Server的 htpasswd 功能,或者使用 openssl passwd 命令生成的密码。
  • Apache MD5密码算法的变体(ap1)。
  • ???? 参看英文文档。

3.3. 如何生成密码

这里直接使用 htpasswd 生成密码文件, 需要安装 apache2-utils (Debian/Ubuntu)或者 httpd-tools (RHEL/CentOS/Oracle LInux)。可以先在命令窗输入以下 htpasswd 命令测试一下是否已经安装。
确保htpasswd命令已经存在以后,输入以下命令:

htpasswd -c conf/test.htpasswd user1
  • -c 代表直接创建密码文件。
  • conf/test.htpasswd 代表生成的密码文件路径。可以按需更改,我是直接在nginx目录下使用命令的,所以直接生成到conf文件夹下。
  • user1 代表账号名称。
  • 如果想要生成多个账号,请重复以上命令,但是需要去掉 -c 配置,否者会覆盖内容。
  • htpasswd还有很多其他配置,请自行查阅。

接着命令窗会提示输入密码,输入成功后,就会创建类似文件:

user1:$apr1$6GIXyWfm$B0pzW6jj5KdMAg.M3.8Oa1

至此,nginx配置以及密码对文件已经生成,接下来重启nginx就可以了。

4、结果展示

访问我的api网站,可以看到一下弹窗。

nginx HTTP Basic Authentication 小记

当选择取消时:
nginx HTTP Basic Authentication 小记

当输入密码正确时:
nginx HTTP Basic Authentication 小记

5. 注意点

  • nginx配置的密码文件路径一定要正确。
  • http服务器似乎没有办法可以设置认证有效时长,现有的浏览器会保存认证信息,直到用户关闭浏览器或者清空缓存的时候需要会重新触发认证,具体可以看一下这篇文章

原文地址:http://blog.starsion.cn/article/0da469ee-ae2a-4d93-8b3a-a367e5b37bb8

相关标签: nginx 运维