auth模块说明

auth模块提供了一个通用的Web服务的鉴权处理框架(AuthBaseFw), 基于该框架可以快速实现基于修饰符的服务请求鉴权处理。同时该模块中也提供了针对客户端IP鉴权(IPAuth)和使用AppKey模式进行鉴权(AppKeyAuth)的两个实现框架(需继承并适配对应的Web服务)。

构建自定义的AuthBaseFw实现类

1、实现类必须继承AuthBaseFw

需要继承框架类,并实现自定义的 __init__函数:

class MyAuth(AuthBaseFw):

    def __init__(self, **kwargs):
        """
        模块初始化函数
        (需由实现类继承实现)
        """
        pass

2、重载实现鉴权是否通过的判断逻辑函数

async def _auth_call(self, *args, **kwargs) -> tuple:
    """
    真正的校验处理函数

    @param {args} - 执行函数的固定入参
    @param {kwargs} - 执行函数的kv入参

    @returns {tuple} - 返回校验结果数组: (校验是否通过true/false, 错误码, 失败描述)
        注: 错误码由实现类自行定义
    """
    raise NotImplementedError()

3、重载实现对鉴权结果格式化的函数

该函数将_auth_call返回失败的结果,格式化为与处理函数返回结果格式相同的值类型

def _format_auth_resp(self, code: Any, err_msg: str) -> Any:
    """
    格式化校验结果返回值

    @param {Any} code - 错误码
    @param {str} err_msg - 失败描述

    @returns {Any} - 格式化后的返回值
    """
    raise NotImplementedError()

4、重载实现对处理函数返回结果格式化的函数

该函数将正常运行的处理函数的返回值,或者_format_auth_resp格式化后的鉴权失败返回值,格式化为所需的格式,供web服务处理最终的返回:

def _format_last_resp(self, resp: Any, is_auth_result: bool) -> Any:
    """
    格式化最后的响应对象

    @param {Any} resp - 最后的响应对象
    @param {bool} is_auth_result - 是否服务鉴权所返回的结果

    @returns {Any} - 转换以后的响应对象
    """
    return resp

AuthBaseFw实现类的使用

1、直接实例化,并使用实例化后对象对处理函数进行修饰

# 实例化IPAuth鉴权对象, 增加访问白名单
_ip_auth = IPAuthXXX(init_whitelist=['10.1.43.*', '10.2.*, *'])

# 服务处理函数定义, 增加_ip_auth对象的鉴权修饰符
@_ip_auth.auth_required
def deal_fun_1(...):
   ...

@_ip_auth.auth_required
def deal_fun_2(...):
   ...

2、使用Web服务的support_auths功能

具体见 server 的模块说明。