nginx HTTP Basic Authentication 小记
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
,所以我们需要手动打开,能使用的上下文有: http
、 server
、 location
、 limit_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网站,可以看到一下弹窗。
当选择取消时:
当输入密码正确时:
5. 注意点
- nginx配置的密码文件路径一定要正确。
- http服务器似乎没有办法可以设置认证有效时长,现有的浏览器会保存认证信息,直到用户关闭浏览器或者清空缓存的时候需要会重新触发认证,具体可以看一下这篇文章。
原文地址:http://blog.starsion.cn/article/0da469ee-ae2a-4d93-8b3a-a367e5b37bb8
推荐阅读
-
nginx HTTP Basic Authentication 小记
-
HTTP基本认证(Basic Authentication)
-
HTTP基本认证(Basic Authentication)的JAVA实例代码
-
HTTP基本认证(Basic Authentication)的JAVA实例代码
-
nginx用户认证配置( Basic HTTP authentication) 博客分类: nginx
-
http basic authentication通过post方式访问api示例分享 basic认证示例
-
http basic authentication通过post方式访问api示例分享 basic认证示例
-
HTTP Basic Authentication 基本认证
-
HTTP Basic Authentication认证
-
HTTP Basic 认证(Authentication)