HiveNetWebUtils.auth module

服务鉴权模块

class HiveNetWebUtils.auth.AppKeyAuth(**kwargs)[源代码]

基类:AuthBaseFw

AppKey模式验证模块

整体流程: 调用方对请求报文签名 -> 服务方验证请求签名 -> 服务方处理并对返回报文签名 -> 调用方验证返回报文签名 详细说明如下:

  1. 服务端生成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”

  1. 拼接API密钥 # 拼接app_id、app_key、app_secret、nonce_str、timestamp进入签名字符串 stringSignTemp=stringA+”&app_id=1333&app_key=123456&app_secret=192006250b4c09247ec02edce69f6a2d&nonce_str=xx&timestamp=xx” # 如果选择MD5签名方式, 处理及得到结果如下 sign=MD5(stringSignTemp).toUpperCase()=”9A0A8659F005D6984697E2CA0A9CF3B7” # 如果选择HMAC-SHA256算法签名方式, 处理及得到结果如下 # 注意: 部分语言的hmac方法生成结果二进制结果, 需要调对应函数转化为十六进制字符串。 sign=hash_hmac(“sha256”,stringSignTemp,AppSecret).toUpperCase()=”6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC30B23E0EE2496E54170DACD6”

  2. 将sign放入要发送的数据集合中, 客户端调用api接口

  3. 服务器端同样做相应的认证检查

__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: str = None) str[源代码]

对消息字典进行签名

参数
  • msg (dict) – 要签名的字典

  • app_key (str) – 商户持有的app_key(相当于公钥)

  • app_secret (str) – 商户持有的AppSecret私匙(相当于密码)

  • algorithm (str) –

    default=None, 使用的签名算法名, 如果不传使用初始化类的指定算法, 支持算法如下

    MD5

    HMAC-SHA256

返回

返回签名验证字符串

返回类型

str

sign(msg: dict) dict[源代码]

对报文消息字典进行签名

参数

msg (dict) – 要签名的报文字典

返回

签名后的报文字典

返回类型

dict

verify_sign(msg: dict) bool[源代码]

验证报文签名是否准确

参数

msg (dict) – 要验证的报文字典

返回

报文验证结果

返回类型

bool

verify_timestamp(msg: dict) bool[源代码]

验证时间戳是否已过期

参数

msg (dict) – 要验证的报文字典

返回

验证结果

返回类型

bool

class HiveNetWebUtils.auth.AuthBaseFw(**kwargs)[源代码]

基类:object

服务鉴权基础框架

__init__(**kwargs)[源代码]

模块初始化函数

(需由实现类继承实现)

auth_required(f=None)[源代码]

当前模块的鉴权修饰符函数

参数

f (function) – default=None, 所执行的函数

async auth_required_call(f, *args, **kwargs)[源代码]

直接执行的鉴权修饰符函数

参数
  • f (function) – 要执行的函数

  • 执行函数的固定入参 (-) –

  • 执行函数的kv入参 (-) –

返回

返回响应信息(如果执行成功返回函数返回信息, 如果执行失败返回验证失败信息)

返回类型

Any

class HiveNetWebUtils.auth.IPAuth(**kwargs)[源代码]

基类:AuthBaseFw

IP黑白名单模式验证模块

__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地址验证失败’}, 验证失败返回的信息

add_blacklist(ips)[源代码]

添加黑名单

参数

ips (str|list) – 要添加的ip或ip列表

add_whitelist(ips)[源代码]

添加白名单

参数

ips (str|list) – 要添加的ip或ip列表

clear_blacklist()[源代码]

清除黑名单

clear_whitelist()[源代码]

清除白名单

remove_blacklist(ips)[源代码]

删除黑名单

参数

ips (str|list) – 要删除的ip或ip列表

remove_whitelist(ips)[源代码]

删除白名单

参数

ips (str|list) – 要删除的ip或ip列表

verify_blacklist(ip: str) bool[源代码]

验证是否匹配黑名单

参数

ip (str) – 要验证的ip

返回

检查结果, 匹配到返回True

返回类型

bool

verify_whitelist(ip: str) bool[源代码]

验证是否匹配白名单

参数

ip (str) – 要验证的ip

返回

检查结果, 匹配到返回True

返回类型

bool