# eAuth **Repository Path**: bertramoon/e-auth ## Basic Information - **Project Name**: eAuth - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-16 - **Last Updated**: 2025-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # eAuth 基于RBAC的身份认证与访问控制系统【后端部分】—— 基于python3的flask框架(使用apiflask插件) 前端部分链接: [https://github.com/Bertramoon/eAuth-front](https://github.com/Bertramoon/eAuth-front ) ## 基本项目结构 列举重要的文件并对有必要的部分加以说明 ``` /EAUTH/EAUTH | constant.py | extensions.py | log_config.yaml | settings.py【存储系统的重要配置,部分配置从环境变量中读取】 | __init__.py | +---auth【认证模块】 | | api.py【接口】 | | models.py【数据库模型定义】 | | schemas.py【输入输出模型定义】 | +---base | | schemas.py | | validators.py | | __init__.py | +---config【配置模块】 | | api.py | | __init__.py | | | +---schemas | | | api.py | | | role.py | | | user.py | | | __init__.py | +---log | | api.py | | models.py | | schemas.py | | __init__.py | +---schedule | | auth.py | | __init__.py | +---templates | \---emails | register.html | register.txt | reset.html | reset.txt | +---utils | | auth.py | | decorator.py | | email.py | | message.py | | model.py | | tool.py | | __init__.py ``` ## 构建与初始化 ### 安装依赖包 ```shell pip install -r requirements.txt ``` ### 创建数据库和数据表 ```shell flask initdb ``` 默认使用的是测试配置,对应的是本地数据库sqlite,如果需要修改数据库(例如使用MySQL): 1. 在根目录下创建`.env`文件,并添加数据库配置 ``` db_username=xxx db_password=xxx db_url=127.0.0.1:3306 database=eauth ``` 2. 修改根目录下`.flaskenv`文件`FLASK_APP`配置 ``` FLASK_APP=eAuth:create_app('base') ``` ### 配置 `/.env` ``` db_username=xxx db_password=xxx db_url=127.0.0.1:3306 database=eauth MAIL_USERNAME=xxx@xxx.com MAIL_PASSWORD=xxx MAIL_NAME=xxx MAIL_SERVER=smtp.xxx.com # 邮件系统 MAIL_DOMAIN=qq.com # 允许使用的邮件后缀 ``` `/eAuth/settings/py`核心配置: ```python class XxxConfig: # token有效期 TOKEN_EXPIRED = 60 * 60 * 3 # 登录失败防暴力破解 SHORT_MAX_LOGIN_INCORRECT = 5 # 短期最大登录失败次数 SHORT_MAX_LOGIN_DELAY = 1 # 短期最大登录失败后能够再次登录的时间间隔(小时) MAX_LOGIN_INCORRECT = 15 # 最大登录失败次数 # 不认证不鉴权接口 AUTH_WHITE_LIST = {"POST /api/auth/login", "GET /docs", "GET /openapi.json"} # 不鉴权接口 PERMISSION_WHITE_LIST = {"POST /api/auth/check"} # 邮件设置 MAIL_USE_SSL = True MAIL_PORT = 465 MAIL_SERVER = os.getenv('MAIL_SERVER') MAIL_USERNAME = os.getenv('MAIL_USERNAME') MAIL_PASSWORD = os.getenv('MAIL_PASSWORD') MAIL_DEFAULT_SENDER = (os.getenv("MAIL_NAME"), MAIL_USERNAME) MAIL_DOMAIN_ONLY = os.getenv("MAIL_DOMAIN", None) # IP访问白名单 IP_WHITE_LIST = { "127.0.0.1" } ``` ### 运行 Windows: ```shell venv\Scripts\activate flask run ``` Linux: ```shell source venv/bin/activate flask run ``` ## 设计与实现 ### 功能设计 ### 数据设计 ### 质量设计 #### 性能 ##### 缓存设计 核心鉴权接口使用内存缓存,其他地方不用缓存 #### 安全 ##### 机密性 ###### 用户管理 1、创建用户 - 用户名校验 - 口令生成 - 邮箱确认 2、密码管理 - 密码存储 - 密码修改 - 密码找回 3、登录登出 - 登录安全设计 - 会话安全设计 4、禁用用户 - 安全设计(令账号和会话失效) ###### 身份认证与访问控制 - 身份认证算法 ##### 完整性 ##### 不可抵赖性 ###### 审计日志 eAuth的审计日志主要有操作日志和登录日志。 1、操作日志记录用户的操作(本系统主要是API配置、角色配置、为用户授权),包括: - 操作人 - 客户端IP - 操作资源对象id - 操作类型(请求方法和接口名) - 操作结果 - 响应码 - 请求内容 - 响应内容 - 操作时间 PS: 1)操作资源对象id有且仅有一个。一方面是基于设计,RESTFul风格是基于资源操作的,在本系统,每个接口仅操作某一类对象,同时,规定了只会有一个路径参数。另一方面,接口便于搜索查询 2)操作类型中记录的接口名称是按照flask中的格式的,例如`/api/config/role/` 3)请求内容和响应内容参考接口AuditLogInterface,需要在schema中实现该接口 2、登录日志记录用户的登录登出等操作,包括: - 操作人 - 客户端IP - 操作(例如登录) - 操作结果 - 操作时间 ##### 可用性 - 接口限流 - 数据分页