一、背景
基于 Flask 开发了一些 API接口,接口的控制需要访问权限,防止外部用户随意调用。
二、方案
获取请求方ip,然后判断此 ip 是否在白名单列表里面,如果不在则拒绝请求,这个白名单信息最好是可以通过动态更新或者数据库来维护,不然每次新增都需要上线操作,比较麻烦,代码示例如下:
# -*- coding: utf-8 -*-
from flask import Flask, request
from logzero import logger
# 创建Flask的应用程序
app = Flask(__name__)
# ip白名单
ip_whitelist = ["10.13.12.136", "10.23.56.135"]
# 以装饰器形式绑定路由
@app.route('/')
def hello_world():
# 获取请求来源ip
ip = request.remote_addr
logger.info("ip: {}".format(ip))
if ip not in ip_whitelist:
return 'ip is not in whitelist!'
return 'Hello World!'
if __name__ == '__main__':
# 启动flask程序
app.run(host="0.0.0.0", debug=True, port=8765)
根据机器名字获取 ip 信息:
获取ip
import socket
host_ip = socket.gethostbyname