接口安全机制
一. 用户认证
在接口请求中会有一个Auth字段, Authorization Header ,用来进行安全校验
1.用户认证接口
- blog/view_if_sec.py
def user_auth(request):
get_http_auth = request.META.get('HTTP_AUTHORIZATION', b'')
auth = get_http_auth.split()
try:
auth_parts = base64.b64decode(auth[1]).decode('iso-8859-1').partition(':')
except IndexError:
return "null"
userid, password = auth_parts[0], auth_parts[2]
user = django_auth.authenticate(username=userid, password=password)
if user is not None and user.is_active:
django_auth.login(request, user)
return "success"
else:
return "fail"
- blog/view_if_sec.py 增加注释
from django.contrib import auth as django_auth
import hashlib
import base64
# 用户认证
def user_auth(request):
#request.META是python的一个字典,包含传入request的所有HTTP请求信息
#HTTP_AUTHORIZATION 用于获取HTTP authorization的参数
# 得到的数据是这样的:Basic YWRtaW46YWRtaW4xMjM0NTY=
get_http_auth = request.META.get('HTTP_AUTHORIZATION', b'')
#通过split拆分成对应的list
#拆分后的数据是这样的:['Basic', 'YWRtaW46YWRtaW4xMjM0NTY=']
auth = get_http_auth.split()
try:
#通过base64对加密串进行解码,通过partion增加:区分admin和密码
# 得到的数据是:('admin', ':', 'admin123456')
auth_parts = base64.b64decode(auth[1]).decode('iso-8859-1').partition(':')
except IndexError:
return "null"
#获取用户名密码
userid, password = auth_parts[0], auth_parts[2]
#Django的账户认证
user = django_auth.authenticate(username=userid, password=password)
if user is not None and user.is_active:
django_auth.login(request, user)
return "success"
else:
return "fail"
2.新增发布会查询接口
- blog/view_if_sec.py
# 在发布会查询接口-中增加用户认证
def get_event_list(request):
# 调用认证函数
auth_result = user_auth(request)
if auth_result == "null":
retu