前言:

     话说什么是基本认证?   在HTTP协议进行通信的过程中,HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。


    客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中, 如当用户名为xiaorui,密码为:123456时,客户端将用户名和密码用“:”合并,并将合并后的字符串用BASE64加密为密文,并于每次请求数据 时,将密文附加于请求头(Request Header)中。

       这样HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用 户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码。

Hello, 原文地址是 , blog.xiaorui.cc

正题了!!!!

写接口的时候,推荐大家用Restful方式的,因为这样更加的有序,灵巧REST只是风格,不是标准。用rest是为了避免有的方面容易有误解,比如说创建和更新某个URI代表的资源的时候,是用HTTP的PUT和POST命令。REST常用的四种HTTP命令,GET、DELETE、PUT和POST,对于GET和DELETE,一个是获取资源,一个是删除资源。

为了配合描述基本认证,我这边说下以前的分析日志的工作 。 

      首先用awk来分析的nginx日志并分割,因为日志是scribe集中式收集的,就算按照小时分切了,但还是很大。因为是集中到了平台,所以需要看到他的进度和事件进度。 用awk切割并处理完了后,他会curl到   xiaorui.cc/nginx/log/cut   post的数据是 记录所用时间,记录执行结束时间,以及告知log目录的情况。

        当再次awk分析的时候  他会先get上次执行完后,日志的最后一个时间,然后用这个时间做为分析日志的开始时间,最后时间为日志文件的结尾, 分析处理完了后curl到 ops.com/nginx/fenxi   post的数据是 开始时间戳 结束的时间戳  200的状态  404的状态  502的状态等等


当要删除前30天的数据,他会curl到  xiaorui.cc/nginx/rmlog   post的数据是 删除的时间 文件名  ip地址。但是接口的安全没有做到位。 

如果是restful的方式的话,他会在服务端来接收 请求的方式    是post get put delete。。。。
根据他的情况,再做二次的判断。。。。

结果是:

GET /echoECHO: GETPOST /ECHOECHO: POST

再来说说:

为啥用基本认证,其实我以前从来不加的,麻烦。。。。  


最一开始的认证方式是    在要传输的字符串里面加密一下,然后在server端进行逆向的解密,方法虽然有点搓,但是有效。

然后,再这个基础上   加个一个字段   比如:

这个需要再后端接受这个form表单的字段
接着用了nginx lua来实现反向python的接口。
nginx可以紧密的融洽lua,用户来访问的时候,我先通过lua来取数据库的账号和密码,ok  跳转到index.html   bad  让他滚蛋。。。。
后来有些xx部门来找我,让我们加个密码认证,一个小接口用session来做经常会出现登出的情况,这个和我的server端有关系。
既然不用session,那就用基本认证,nginx的目录验证用的就是基本认证,一打开页面会出现提示框  让你输入账号和密码。。。。对,就是这个。

python的实现方式有不少,最好是用一个web框架 例如 tornado flask web.py django,他们都有库可以实现。


这里是用flask实现的,先写一个函数用来处理用户认证 。

再来写路由表,web的框架是Flask,触发了route后,会调用认证的装饰器。 

我们请求下 会出现
GET /secretsHTTP/1.0 401 UNAUTHORIZEDWWW-Authenticate: Basic realm=”Example”{  ”message”: “Authenticate.”}

如果我们加上账号和密码

curl -v -u “admin:secret” http://127.0.0.1:5000/secrets

return   www.xiaorui.cc

其实基本认证就两个路数
一是在请求头中添加Authorization:
Authorization: “Basic 用户名和密码的base64加密字符串”
二是在url中添加用户名和密码:
http://userName:password@www.xiaorui.cc/statuses/friends_timeline.xml
下面来看下对于第一种在请求中添加Authorization头部的各种语言的实现代码。



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品
  1. 大神你好,我现在一直在用tornado做开发,感觉用得也挺顺手的。有必要同时也学习一下flask吗?这两个哪个工作好找点?我现在还是学生一个。