EVE JWT身份验证
eve-auth-jwt的Python项目详细描述
用于Eve的OAuth 2 JWT令牌验证模块
安装
要安装eve auth jwt,只需:
$ pip install eve-auth-jwt
在EVE初始化时:
from eve import Eve from eve_auth_jwt import JWTAuth app = Eve(auth=JWTAuth, settings=SETTINGS)
配置
此模块从EVE设置读取其配置。下面是新指令的列表:
- JWT_SECRET(必需):定义用于对令牌进行解/编码的symetric secret令牌密钥(异步密钥支持是TODO)
- JWT_ISSUER(必需):定义必需的令牌颁发者(iss声明)。
- JWT_AUDIENCES:定义接受的访问群体列表(audclaim)如果没有提供,则只接受没有观众集的令牌资源级别audiences参数也可用。
- JWT_ROLES_CLAIM:定义角色的声明名称如果设置了,eve角色检查将被激活,并且任何设置了allowed_roles的资源都需要在定义的令牌声明中包含这些角色。
- JWT_SCOPE_CLAIM:定义作用域的声明名称。如果set和令牌具有包含字符串viewer的同名声明,则只授予GET和HEAD方法。所有其他值都将被忽略并添加到前缀为scope:的公开角色列表中。
阅读角色
如果授予访问权限,则身份验证模块将通过get_authen_roles()和get_authen_claims()方法公开角色和令牌声明。您可以从事件挂钩访问这些值,如下所示:
def my_hook(...) resource_def = app.config['DOMAIN'][resource_name] auth = resource_def['authentication'] if 'somerole' in auth.get_authen_roles(): # grant some finer access
保护自定义路由
jwt授权可以应用于任何使用@requires\u令牌包装器的自定义路由。此批注将只提供访问群体和角色访问控制用户级访问必须手动写入。
访问控制示例:
from eve_auth_jwt import requires_token, get_request_auth_value @app.route('/my_resource/download', methods=['GET']) @requires_token(audiences=['myAudience']) def csv_download(): # Allows all users with myAudience to access download account_id = get_request_auth_value() if check_user(account_id): abort(401) return generateCSV(account_id)
myadmin访问控制示例:
from eve_auth_jwt import requires_token @app.route('/admin/my_resource/download', methods=['GET']) @requires_token(audiences=['myAudience'], allowed_roles=['myAdmin']) def csv_download(): account_id = request.args.get('account_id', None) return generateCSV(account_id)
访问解析的JWT令牌值
已解析的可验证的令牌值存储在< > >烧瓶中,但自定义函数有助于读取值。这些值只有在JWT令牌完整性检查和用户授权之后才可用访问parse jwt令牌字段的示例:
from eve_auth_jwt import get_request_auth_value, get_authen_claims, get_authen_roles def my_fn(): # Request authentication value as a str account_id = get_request_auth_value() # JWT claims as a dict[str] payload = get_authen_claims() # Roles as arr[str] roles = get_authen_roles()
许可证
所有源代码都是根据MIT License授权的。