.. _config: ************ 配置 ************ http服务配置 ============== .. py:data:: HTTP_LISTEN :default: ``'0.0.0.0:8300'`` .. py:data:: LITE_AUTH_URL :default: ``'http://127.0.0.1:8080'`` 访问lite auth的站点地址,填ip或域名。部署时需要使用nginx或apache监听此地址,并把请求转发到 HTTP_LISTEN .. py:data:: ADMIN_URL :default: ``'admin/'`` 管理后台的地址 ---------------------- ldap服务配置 ============== .. py:data:: LDAP_LISTEN :default: ``'0.0.0.0:8389'`` .. py:data:: SEARCH_LIMIT :default: ``1000`` 最多返回多少用户 .. py:data:: LDAP_USER :default: ``'ldap'`` 用于ldap请求的用户,此用户不能登录管理后台,相当于只读用户。如果在初始化后修改了此项,你需要进数据库手动修改uid LDAP_API相关 ------------------ ldap服务不是直接访问数据库,而是通过ldap api访问。 .. py:data:: LDAP_API_URL :default: ``'http://127.0.0.1:8080'`` http服务的地址,ldap服务会请求这个地址。其实就是LITE_AUTH_URL,不过建议写内网地址 .. py:data:: LDAP_API_TIMEOUT :default: ``3`` LDAP_API http请求的超时时间,秒。 一般不需要修改,如果遇到errorMessage为HttpServerNeverReceived错误,可以尝试调大此项 .. note:: 如果出现需要修改此项才能正常返回的情况,请反馈给我 .. py:data:: LDAP_API_AUTH_EXPIRY :default: ``60`` LDAP_API登录凭证的有效期,秒 (同时也是ldap连接的超时时间)。ldap_bind会获取登录凭证以供后续请求验证身份 .. _ldap_field_map: .. py:data:: LDAP_FIELD_MAP :default: .. code-block:: python LDAP_FIELD_MAP = { 'cn': 'uid', 'sn': 'uid', 'userpassword': 'password', 'ou': 'groups', } ldap字段对应的liteAuth字段 **(key必须是全小写,value区分大小写)** 。 search时会把filter条件中的key替换为map中的值;bind请求会把binddn中的key替换为map中的值 用于已经配置了ldap的服务,不想改配置的参数,则修改此项。 比如,已经配置的bind的dn是:"cn=admin,dc=xx",通过添加 ``'cn':'uid'`` .. py:data:: LITE_AUTH_FIELD_MAP :default: ``{}`` liteAuth字段对应的ldap字段 **(key区分大小写,value必须是全小写)** 。 ldap返回用户信息时,会把用户属性的key替换为map中的值。 用于已经配置了ldap的服务,不想改配置的参数,则修改此项。 比如,已经配置了用户名是"givename", 通过添加 ``'name':'givename'`` ,返回用户属性时就会使用 "givename" 代替 "name" ---------------------- 策略配置 =============== 登录锁定策略 --------------- .. py:data:: MAX_LOGIN_ATTEMPT_NUM :default: ``5`` 最大连续登录失败次数,0表示无限制 .. py:data:: RESET_LOGIN_ATTEMPT_NUM_AFTER :default: ``60`` n秒后重置登录失败次数 .. py:data:: USER_LOCK_DURATION :default: ``60 * 5`` 锁定时间,秒 密码校验器 -------------------- .. py:data:: PASSWORD_VALIDATORS :default: .. code-block:: python PASSWORD_VALIDATORS = { # 长度校验,min_length: 1-30 'LengthValidator': {'min_length': 8}, # 密码重用校验,禁止使用前num次使用的密码,0-5 'ReuseValidator': {'num': 2}, # 常见密码校验,禁止过于简单的密码,如:1234 'CommonValidator': {}, # 属性相似度校验,禁止和uid,mail相似的密码 'UserInfoSimilarityValidator': {}, # 复杂度校验 'CharacterValidator': { 'character_types': 2, # 包含的多少种不同字符, 1-4 'symbols': r'''!"#$%&'()*+,-./:<=>?@[\]^_`{|}~''' # 允许的标点。 注意:格式是 r'''标点''' }, } 密码校验器,设置密码时的校验。 自定义的校验器,key为绝对路径,如: 'custom.your_validator.FooValidator' .. py:data:: MAX_PASSWORD_AGE :default: ``180`` 密码有效期,天 --------------------- .. _notification: 通知相关 ============= .. py:data:: NOTIFICATION_BACKEND :default: ``{}`` 通知backend,用于发送密码过期,账户锁定等通知给用户。 如果使用自定义的backend,key为绝对路径,如: ``custom.your_backend.Foo`` .. note:: 你可以配置多个backend,不过不建议这么做。 发通知并不是异步的,多个backend或影响请求返回时间。 自带的bacnkend有: * **Email** 只支持smtp .. code-block:: python NOTIFICATION_BACKEND={ 'Email': { 'host': 'smtp.163.com', 'port': '25', 'username': 'xx@163.com', 'password': 'xx' } } * **FeiShu** 飞书机器人通知 .. code-block:: python NOTIFICATION_BACKEND={ 'FeiShu': { 'app_id': 'cli_xx', 'app_secret': 'xx' }, } 你需要开通飞书机器人,步骤如下: 1. 注册 `飞书开发平台 `_ 。 2. 创建企业自建应用(标题图标随意) #. 获取 ``app_id`` , ``app_secret`` #. 在"应用功能"中启动机器人功能 #. 在"权限管理"中给予权限: ``用户 - 通过手机号或者邮箱获取用户ID`` , ``消息 - 给多个用户批量发消息`` , ``消息 - 以应用的身份发消息`` #. 在“版本管理与发布”中创建版本并发布。(需要联系管理员审核通过) * **SMS** 短信通知 .. code-block:: python NOTIFICATION_BACKEND={ 'SMS': { 'url': 'http://xxx', # 你的接口地址 'method':'post', # 只支持 post, get 'json': True, # 提交json格式的数据 }, } 由于不同短信服务商对接方式不一样,无法给个通用的短信backend,需要短信通知你可以自行开发个backend。 对于不熟悉python的公司,可以使用提供的SMS backend,你需要开发个新接口用于接收backend提交的发送短信的请求。 这个接口的提交的参数为:mobile, msg .. py:data:: PASSWORD_EXPIRATION_NOTIFICATION :default: .. code-block:: python PASSWORD_EXPIRATION_NOTIFICATION = { # 运行时间 'crontab': '0 8 * * *', # 还剩几天时发通知,不用写0 'days': [30, 10, 7, 3, 2, 1] } 密码过期通知任务 ----------------- 日志相关 ============== .. py:data:: LOG_PATH :default: ``'./log'`` .. py:data:: LOG_MAX_BYTES :default: ``1024 * 1024 * 10`` 多大后切割,默认10mb .. py:data:: LOG_BACKUP_COUNT :default: ``10`` 保留几份 数据库配置 ================= liteAuth默认使用sqlite3数据库,大多数情况下完全够用了。 如果需要你也可以切换为 ``mysql`` , ``postgresql`` 等数据库。 mysql -------------- 下面给出mysql的配置说明 1. 安装 `mysqlclient `_ 库。(docker部署不需要) .. code-block:: pip install mysqlclient 2. 在配置文件中添加 .. code-block:: python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'liteauth_db', # 数据库名 'USER': 'root', # 账号 'PASSWORD': 'secret', 'HOST': '127.0.0.1', 'POST': 3306, 'OPTIONS': { 'charset': 'utf8mb4', # 使用mysql必须设置此项 }, } } 3. 创建数据库 .. code-block:: CREATE DATABASE liteauth_db /*!40100 DEFAULT CHARACTER SET utf8mb4 */; 4. 执行初始化(docker直接重启) .. code-block:: ./lite_auth.py init postgresql -------------- 1. 安装 `psycopg2 `_ 库。(docker部署不需要) .. code-block:: pip install psycopg2 2. 在配置文件中添加 .. code-block:: python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'liteauth_db', # 数据库名 'USER': 'root', # 账号 'PASSWORD': 'secret', 'HOST': '127.0.0.1', 'POST': 5432, } } 3. 创建数据库 .. code-block:: CREATE DATABASE liteauth_db; 4. 执行初始化(docker直接重启) .. code-block:: ./lite_auth.py init .. note:: 所有支持的数据库,以及更多说明参考: https://docs.djangoproject.com/en/3.1/ref/databases/ django配置 ============== liteAuth使用django框架,因此同时也继承了django的配置,不过一般不建议你修改这些配置。 django的配置见:https://docs.djangoproject.com/en/3.1/ref/settings/