HiveNetWebUtils.auth module¶
服务鉴权模块
- class HiveNetWebUtils.auth.AppKeyAuth(**kwargs)[源代码]¶
基类:
HiveNetWebUtils.auth.AuthBaseFwAppKey模式验证模块
整体流程: 调用方对请求报文签名 -> 服务方验证请求签名 -> 服务方处理并对返回报文签名 -> 调用方验证返回报文签名 详细说明如下:
- 服务端生成APP信息, 线下提供给商户
AppId: 商户id AppKey: 公匙(相当于账号) AppSecret: 私匙(相当于密码)
2. 客户端对要发送的数据进行签名, 算法如下: (1) 客户端生成 nonce_str 随机字符串, 例如: ‘ibuaiVcKdpRxkhJA’ (2) 设要发送的数据为集合M, 将所有非空参数值的参数按照参数名ASCII码从小到大排序(字典序), 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA, 例如:
stringA=”body=test&device_info=1000&mch_id=10000100”
拼接API密钥 # 拼接app_id、app_key、app_secret、nonce_str、timestamp进入签名字符串 stringSignTemp=stringA+”&app_id=1333&app_key=123456&app_secret=192006250b4c09247ec02edce69f6a2d&nonce_str=xx×tamp=xx” # 如果选择MD5签名方式, 处理及得到结果如下 sign=MD5(stringSignTemp).toUpperCase()=”9A0A8659F005D6984697E2CA0A9CF3B7” # 如果选择HMAC-SHA256算法签名方式, 处理及得到结果如下 # 注意: 部分语言的hmac方法生成结果二进制结果, 需要调对应函数转化为十六进制字符串。 sign=hash_hmac(“sha256”,stringSignTemp,AppSecret).toUpperCase()=”6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6”
将sign放入要发送的数据集合中, 客户端调用api接口
服务器端同样做相应的认证检查
- __init__(**kwargs)[源代码]¶
AppKey模式验证模块
- 参数
get_secret_fun (fuction) –
取 (app_key, app_secret) 密钥对的函数, 默认使用当前类的自有AppKey管理工具函数
fun(app_id:str) -> tuple
sign_resp (bool) – default=False, 是否对返回的报文进行签名
sign_error_resp_status (int) – default=403, 签名验证失败返回状态码
sign_error_resp_msg (str|dict) – default={‘status’: ‘13007’, ‘msg’:’签名检查失败’}, 签名验证失败返回的信息
timestamp_expired_time (float) – default=300.0, 允许服务器时间差异时长, 单位为秒, 默认5分钟
timestamp_error_resp_status (int) – default=403, timestamp已过期时返回状态码
timestamp_error_resp_msg (str|dict) – default={‘status’: ‘13008’, ‘msg’:’时间戳已过期’}, timestamp已过期返回的信息
nonce_len (int) – default=8, nonce字符串的长度
timestamp_fmt (str) – default=’%Y%m%d%H%M%S’, timestamp的格式
encoding (str) – default=’utf-8’, 对中文内容的转换编码
algorithm (str) –
default=’MD5’, 使用的签名算法名, 支持算法如下
MD5
HMAC-SHA256
algorithm_extend (dict) –
default=None, 扩展算法支持, key为algorithm名, value为扩展的算法函数
扩展函数定义如下: fun(value:str, key:str) -> str
- apk_generate_key_pair(app_id: str) tuple[源代码]¶
自有AppKey管理工具的生成新密钥对函数(同时可以加入管理工具)
- 参数
app_id (str) – 要获取的app_id
- 返回
(app_key, app_secret) 密钥对
- 返回类型
tuple
- apk_get_secret_fun(app_id: str) tuple[源代码]¶
自有AppKey管理工具(无安全控制)的取密钥对函数
- 参数
app_id (str) – 要获取的app_id
- 返回
(app_key, app_secret) 密钥对
- 返回类型
tuple
- apk_update_secret(app_id: str, key_pair: tuple)[源代码]¶
自有AppKey管理工具的密钥对更新
- 参数
app_id (str) – 要更新的app_id
key_pair (tuple) – (app_key, app_secret) 密钥对
- async auth_required_call(f, *args, **kwargs)[源代码]¶
直接执行的鉴权修饰符函数
注: 进行了重载, 增加app_id的获取并送入_format_last_resp函数
- 参数
f (function) – 要执行的函数
执行函数的固定入参 (-) –
执行函数的kv入参 (-) –
- 返回
返回响应信息(如果执行成功返回函数返回信息, 如果执行失败返回验证失败信息)
- 返回类型
Any
- get_signature(msg: dict, app_key: str, app_secret: str, algorithm: Optional[str] = None) str[源代码]¶
对消息字典进行签名
- 参数
msg (dict) – 要签名的字典
app_key (str) – 商户持有的app_key(相当于公钥)
app_secret (str) – 商户持有的AppSecret私匙(相当于密码)
algorithm (str) –
default=None, 使用的签名算法名, 如果不传使用初始化类的指定算法, 支持算法如下
MD5
HMAC-SHA256
- 返回
返回签名验证字符串
- 返回类型
str
- class HiveNetWebUtils.auth.IPAuth(**kwargs)[源代码]¶
基类:
HiveNetWebUtils.auth.AuthBaseFwIP黑白名单模式验证模块
- __init__(**kwargs)[源代码]¶
IP黑白名单模式验证模块
- 参数
init_blacklist (list) –
default=None, 初始化的黑名单
名单可以使用通配符禁止某个网段, 例如 [‘127.0.*.*’, ‘138.*.*.*’]
init_whitelist (list) – default=None, 初始化的白名单
error_resp_status (int) – default=403, 验证失败返回状态码
error_resp_msg (str|dict) – default={‘status’: ‘10409’, ‘msg’:’IP地址验证失败’}, 验证失败返回的信息