1. 原因

自己局部服务的测试接口为不便日常测试调试,应用了 ip+端口 的模式进行拜访,并且未配置账号密码鉴权机制。在日常测试一段时间后,终于还是收到了来自腾讯云的监管告诉,说服务存在数据泄露的危险,须要进行整改,否则将强行关停服务。

于是,自己认真思考本问题、查找相干材料并联合自己的web服务理论状况,决定应用 HTTP Basic Auth 技术并联合 NGINX 反向代理来实现接口鉴权的操作。

2. HTTP Basic Auth

2.1 什么是 HTTP Basic Auth ?

HTTP 提供一个用于权限管制和认证的通用框架:根本认证(Basic access authentication),其是一种用来容许网页浏览器或其余客户端程序在申请时提供用户名和口令模式的身份凭证的一种登录验证形式。

长处:

  1. 操作简略
  2. 所有风行的网页浏览器都反对根本认证

毛病:

  1. 认证信息仅仅应用Base64进行编码,并未应用加密算法
  2. 无奈避免中间人攻打,中间人可已批改报文而后申请服务器

2.2 为接口增加 HTTP Basic Auth 鉴权

原理:自己应用 NGINX 反向代理拜访接口数据服务器,并在 NGINX 反向代理配置文件中增加 Basic Auth 鉴权性能,

2.2.1 创立反向代理网站

在反向代理服务器中应用宝塔面板创立一个网站,并将域名(或任应用ip+port)解析到该网站。

2.2.2 装置 htpasswd 并生成鉴权账号和明码

  1. 首先装置 htpasswd 服务

    sudo apt-get install httpd-tools
  2. htpasswd是开源的http服务器Apache Http Server的一个命令行工具,能够用来创立和更新根本认证的用户认证密码文件。
  3. 参数

    -b —>明码间接写在命令行中,而非应用提醒输出的形式-c —>创立密码文件,如果文件存在,则笼罩-n —>不更新密码文件,将用户名明码进行标注输入-m —>应用md5算法对明码解决-d —>应用crypt算法对面解决-s —>应用sha算法对明码解决-p —>不对明码加密解决,应用明文-D —>从密码文件中删除指定用户记录
  4. 生成鉴权的账号密码文件
    在指定目录下生成鉴权的账号密码文件,该目录文件普通用户须要能够拜访并读写。

    htpasswd -bc /usr/local/myPasswd/nginxpasswd test 123123

2.2.3 配置反向代理与鉴权认证

在刚刚创立的反向代理网站的配置文件中增加以下内容:

location / {    # 设置跨域相干配置    add_header 'Access-Control-Allow-Origin''*';    add_header 'Access-Control-Allow-Methods''*';    add_header 'Access-Control-Allow-Headers''*';    if ($request_method = 'OPTIONS') {        return 204;    }    # 设置鉴权相干配置    # 帐号认证弹框的banner信息,阐明服务名称    auth_basic "请输入账号密码:";    # 认证的帐号密码文件,也就是咱们下面应用 htpasswd 创立的密码文件    auth_basic_user_file /usr/local/myPasswd/nginxpasswd;    # 设置反向代理相干配置    # 配置须要被反向代理的数据接口服务器的 ip+端口    proxy_pass http: //127.0.0.1:12345;}

而后通过反向代理服务器配置的域名拜访网站,会弹出输出用户名和明码的弹框:

2.2.4 通过 ajax 申请 api 模式拜访

增加了 Basic Auth 鉴权的接口在应用 ajax 申请时须要在 headers 头部减少 Authorization 字段,并蕴含鉴权的用户名和明码,否则报错401。
例如应用 axios 发送申请:

axios.post(url,{headers:{'Authorization': 'Basic ' + base64encode(username+":"+password)})

至此 HTTP Basic Auth 的配置教程已全副完结。


参考文档:

  1. MDN:HTTP身份验证
  2. 简书:HTTP Authorization
  3. 博客园:Nginx实现Basic Auth

本文首发于自己博客:https://blog.gitnote.cn/post/http_basic_auth

版权信息: CC BY-NC-SA 4.0 (自在转载-非商用-雷同形式共享-放弃署名)