fastapi_token package
Submodules
fastapi_token.encrypt module
fastapi_token.oauth2 module
- class fastapi_token.oauth2.TokenBase[source]
Bases:
objecttoken 生成基类
token生成中使用的变量:
user_id 用户id
user_token 用户获得的认证token, 用于生成最终的在请求中使用的token, 为字符串
token生成和认证过程:
利用 user_id 以及其他信息生成 user_token 使用函数
gen_user_token()客户端使用
gen_auth_token()中的编码方式生成fastapi_token_gen.schemas.Auth形式的数据客户端使用 jwt以及约定的参数对上述生成的数据进行编码, 并组成 OAuth2 Bearer Token 形式发送给服务端
服务端获取 jwt编码的token后, 利用函数
auth()对token进行认证
- gen_user_token(user_id: str, **config) str[source]
生成用户的token, 用于生成最终认证token
:param user_id 用户ID用于生成认证token :param config :return:
- class fastapi_token.oauth2.OAuth2(token_instance: TokenBase, **args)[source]
Bases:
OAuth2PasswordBearer- model: SecurityBase
- scheme_name: str
- class fastapi_token.oauth2.EncryptToken(secret_key: str, algorithm_jwt: str, salt_jwt: str, salt_grand: str, access_token_expire_second: int)[source]
Bases:
TokenBase在HTTP非加密环境下实现认证过程, 并使得认证token的生成不依赖服务端分配而是一次性分配一个密钥,在不暴露此密钥的情况下进行认证. 此过程中 服务端也是无状态的,也就是不需要存储分配给客户的密钥.
利用对称加密方式生成,利用JWS自带签名方式验证,支持增加
user_token的过期时间和权限管理user_token分发和认证过程:1. 利用
fastapi_token.schemas.AccessField中的信息生成 key, nonce,使用用chacha20ietf对内置文明进行加密 获得密文作为客户端JWT加密密钥, 利用JWT生成包含上述生成信息和密文的token作为user_token2. 客户端解码后得到作为加密密钥的密文和生成信息, 使用加密密钥使用JWT编码
fastapi_token.schemas.EncryptAuth, 发送给服务端3. 服务端解码token后获得生成密钥的信息, 并重新生成密和初始向量并加密内置明文获取客户端JWT加密的密钥, 并利用此密钥验证客户端发送的token 的签名, 从而验证客户端的
user_token由于在上述过程中,客户端或者中间攻击者若修改发送的
fastapi_token.schemas.AccessField中的字段会导致最终服务端还原的密钥 发生改变从而阻止对于user_token的修改, 重放攻击可以通过验证客户端发送的token中的时间戳部分防止.- auth(authorization: str) EncryptAuth[source]
认证, 利用access_token 进行认证 :return:
- gen_user_token(user_id: str, access_field: Optional[AccessField] = None, **config) str[source]
生成用户的token, 用于生成最终认证token
:param user_id :用户ID :param access_field : 生成的token的权限,不指定则生成最大权限的token :return: jwt 格式的 user_token
- static gen_auth_token(user_id: str, user_token: str, **config) Tuple[EncryptAuth, str][source]
这里 user_token 为生成认证的jwt代码 根据 user_token 生成最终的认证access_token
:param user_id :param user_token :param config :return: 认证内容以及jwt加密后内容
- class fastapi_token.oauth2.EncryptPlainToken(secret_key: str, algorithm_jwt: str, salt_jwt: str, salt_grand: str, access_token_expire_second: int)[source]
Bases:
EncryptToken- auth(authorization: str) GrantToken[source]
认证, 利用access_token 进行认证 :return:
fastapi_token.schemas module
- class fastapi_token.schemas.AccessField(*, token_expire: int, allow_method: List[str])[source]
Bases:
BaseModelfield to generate encrypt_key
- token_expire: int
user_token 过期时间, unix时间戳
- allow_method: List[str]
能够进行请求的服务
- class fastapi_token.schemas.Auth(*, user_id: str)[source]
Bases:
BaseModel认证token生成所用基类
- user_id: str
用户名
- class fastapi_token.schemas.GrantToken(*, user_id: str, token_expire: int, allow_method: List[str], jwt_algorithm: str, verify_token: str, encrypt_key: str)[source]
Bases:
AccessField,Authuser_token 生成所用的字段
- jwt_algorithm: str
客户端jwt编码所用的算法
- verify_token: str
用于验证, 用户将GrandToken中除 encrypy_key 之外内容发送给服务端,返回该key是否有效
- user_id: str
用户id
- encrypt_key: str
客户端jwt编码所用密钥
- class fastapi_token.schemas.EncryptAuth(*, token_expire: int, allow_method: List[str], user_id: str, timestamp: int)[source]
Bases:
Auth,AccessFieldfastapi_gen.oauth2.EncryptToken所用认证字段- timestamp: int
当前Unix时间戳,单位是秒,不是毫秒
- class fastapi_token.schemas.EncryptTokenConfig(*, secret_key: str, algorithm_jwt: str, salt_jwt: str, salt_grand: str, access_token_expire_second: int)[source]
Bases:
BaseModel- secret_key: str
- algorithm_jwt: str
- salt_jwt: str
- salt_grand: str
- access_token_expire_second: int
- class fastapi_token.schemas.Config(*, token_config: EncryptTokenConfig, allowed_acl: List[str])[source]
Bases:
BaseModel- token_config: EncryptTokenConfig
- allowed_acl: List[str]