Keg认证插件

Keg-Auth的Python项目详细描述


Keg Auth的自述文件

https://circleci.com/gh/level12/keg-auth.svg?&&;style=style&&&&&&&&&&&&;circle-token=b9555533333333333333333333924242424242424242424242483838404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040496C653D736869656C6426636972636C652D746F6B656E3D62393063333336643739323864373333333434343232323233462633333333537https://codecov.io/github/level12/keg-auth/coverage.svg?

用法

  • 安装

    • 基本功能: pip install keg-auth
    • 邮件(即,配置了邮件管理器,请参见下文): pip install keg-auth[mail]
    • jwt(用于使用jwt令牌作为身份验证器): pip install keg-auth[jwt]
    • LDAP(用于使用LDAP目标进行身份验证): pip install keg-auth[LDAP]
  • 配置

    • server name="somehost" :在create-user cli命令中生成url时keg auth需要 -如果需要,请包括端口号(例如 localhost:5000
    • < DL>
      preferred="https" :这一点很重要,因此生成的与身份验证相关的URL是
      安全。您可以有一个ssl重定向,但是当它启动时,密钥将 已在URL中发送。
    • kegauth token expire mins :整数,默认为240分钟(4小时) -如果启用了邮件功能并且模型中有令牌,则会影响验证令牌保持有效的时间
    • kegauth cli user :字符串列表,默认为 ['email'] -命名要由cli用户命令接受并传递给模型的参数
    • 电子邮件设置
      • kegauth email site="keg application" :如果启用了邮件,则在电子邮件正文中使用
      • kegauth email site abbr="keg app :如果启用了邮件,则用于电子邮件主题中
      • 示例消息:
        • 主题:[Keg App]密码重置链接
        • 正文:有人要求重新设置你的桶申请密码。如果不是你…
  • 扩展名

    • 设置身份验证管理器(应用内设置或扩展)
    • 实体注册表连接用户、组、绑定和权限实体。你需要 创建与身份验证管理器关联的注册表,并从 型号(参见型号说明)
    • 请注意,邮件管理器是可选的。如果未提供邮件管理器,则不会发送邮件
    • 权限可以作为简单的字符串令牌传递,也可以作为 (token,description)的元组传递
    <阻塞率> 啊!
  • 登录身份验证器控制用户的验证

    • 包括用于从登录路由验证用户的逻辑,以及其他视图层操作 用户工作流程所需(例如验证电子邮件、密码重置等)
    • 身份验证程序可以在身份验证管理器上指定:
      • 'keg'是默认的主身份验证程序,使用用户名/密码
      • 验证管理器(电子邮件,登录/验证程序=ldapauthenticator)
    • LDAp认证
      • 来自keg_auth import ldapauthenticator
      • 使用需要安装的pyldap: pip install keg auth[ldap]
      • 附加配置:
        • kegauth_ldap_test_mode:如果为true,则绕过ldap调用。默认为false
        • kegauth_ldap_服务器url:用于查询的目标ldap服务器
        • kegauth_ldap_dn_format:为查询设置的可格式化字符串 -例如, uid={},dc=example,dc=org
  • 当用户不在会话中并且标识数据在请求中时,请求加载程序将运行

    • authmanager(mail_ext,request_loaders=jwtrequestloader)
    • 令牌身份验证器,如jwtrequestloader,有一个 创建访问令牌的方法 - 令牌= 身份验证管理器。获取请求加载程序('jwt')。创建访问令牌(用户)
    • JWT: - 来自keg_auth import jwtrequestloader -使用扩展的烧瓶jwt,需要安装: pip install keg auth[jwt]
  • 蓝图

    • 包括一个auth蓝图和你的应用的蓝图,其中包括登录视图 以及用户/组/捆绑包管理。需要authmanager实例:
    fromkeg_authimportmake_blueprintfrommy_app.extensionsimportauth_managerauth_bp=make_blueprint(__name__,auth_manager)
  • cli是初级的,在auth组中只有一个create user命令。你可以延长 使用应用程序的auth_manager上的cli_group属性进行分组,但您需要访问 应用程序在启动时执行此操作。你可以用一个事件信号来处理这个-只要确定 您的应用程序的"访问"模块有活动的位置。

    # in app definitionvisit_modules=['.events']# in events modulefromkeg.signalsimportinit_completefromkeg_auth_ta.cliimportauth_cli_extensions@init_complete.connectdefinit_app_cli(app):auth_cli_extensions(app)# in clidefauth_cli_extensions(app):@app.auth_manager.cli_group.command('command-extension')defcommand_extension():pass
  • 默认情况下,cli create user命令有一个必需的参数(email)。如果你愿意的话 附加参数,将arg名称列表放入 kegauth_cli_user_args config

  • 型号

    • 使用现有的mixin创建实体,并将它们注册到 桶认证
    • 注意:用户模型假设实体与usermixin混合 将具有pk id
    • 电子邮件地址和令牌验证位于 useremailmixin -也就是说,如果你的应用程序不使用电子邮件令牌验证密码,请将该混音保留在外
    fromkeg.dbimportdbfromkeg_elements.db.mixinsimportDefaultColsMixin,MethodsMixinfromkeg_authimportUserMixin,UserEmailMixin,PermissionMixin,BundleMixin,GroupMixinfrommy_app.extensionsimportauth_entity_registryclassEntityMixin(DefaultColsMixin,MethodsMixin):pass@auth_entity_registry.register_userclassUser(db.Model,UserEmailMixin,UserMixin,EntityMixin):__tablename__='users'@auth_entity_registry.register_permissionclassPermission(db.Model,PermissionMixin,EntityMixin):__tablename__='permissions'def__repr__(self):return'<Permission id={} token={}>'.format(self.id,self.token)@auth_entity_registry.register_bundleclassBundle(db.Model,BundleMixin,EntityMixin):__tablename__='bundles'@auth_entity_registry.register_groupclassGroup(db.Model,GroupMixin,EntityMixin):__tablename__='groups'
  • 导航帮助程序

    • keg auth提供导航帮助程序来设置菜单树,树上的节点是 根据目标端点的身份验证/授权要求进行限制
    • 用法包括使用navitem/navurl对象设置菜单结构。请注意,上的权限 出于导航目的,路线可能会被覆盖
    • 可以在auth manager上跟踪菜单,它将在 登录/注销
    • keg_auth/navigation.html 模板有一个助手 呈现菜单 - {%import"keg_auth/navigation.html"作为navigation%} - 呈现菜单(auth_manager.menus['main'])
    • 示例:
    fromkeg.signalsimportinit_completefromkeg_authimportNavItem,NavURL@init_complete.connectdefinit_navigation(app):app.auth_manager.add_navigation_menu('main',NavItem(NavItem('Home',NavURL('public.home')),NavItem('Nesting',NavItem('Secret1',NavURL('private.secret1')),NavItem('Secret1 Class',NavURL('private.secret1-class')),),NavItem('Permissions On Stock Methods',NavURL('private.secret2')),NavItem('Permissions On Methods',NavURL('private.someroute')),NavItem('Permissions On Class And Method',NavURL('private.secret4')),NavItem('Permissions On NavURL',NavURL('private.secret3',requires_permissions='permission3')),NavItem('User Manage',NavURL('auth.user:add')),))
  • 模板

    • 为auth视图提供了模板,以及基本crud模板
    • 基本模板是从设置中引用的。其中第一个定义用于: - 基本模板 - kegauth_base_模板
  • 视图

    • 使用requires*decorators可限制访问视图
    • 每个decorator都可以用作类decorator 查看方法
    • 另外,可以在蓝图上使用decorator来将需求应用到所有 蓝图上的路线
    • 需要用户
    • 要求用户在继续之前进行身份验证 (仅限身份验证)
    • 用法: @需要用户 @需要用户 (两种用法 如果不需要辅助身份验证器,则模式相同)
    • 注意:这与 flask_login.login类似_必需的 ,但是 可以用作类/蓝图装饰器
    • 你可以通过一个自定义的 on_authentication_failure 调用装饰器,否则它将 重定向到登录页
    • 修饰的类/蓝图可能有一个自定义的 on_authentication_failure 实例方法 把一个传给装饰工
  • 需要u权限
    • 要求用户在继续之前获得有条件授权 (身份验证+授权)
    • has_any has_all 帮助程序可用于构造 复杂条件,使用字符串权限标记,嵌套 帮助程序和可调用方法
    • 你可以通过一个自定义的 on\u authorization\u failure 调用装饰器,否则它将 响应403未授权
    • 修饰的类/蓝图可能有一个自定义的 on_authorization_failure 实例方法 把一个传给装饰工
    • 用法:
      • @需要权限(('token1', 'token2'))
      • @需要_权限(has _any('token1', 'token2'))
      • @需要_权限(has _all('token1', 'token2'))
      • @需要_权限(has _all(has _any('token1', 'token2'), 'token3')
      • @需要权限(可调用的自定义授权,接受用户参数)
  • 提供了一个标准的crud视图,其中包含add、edit、delete和list"actions"
    • 来自Keg_auth import crudview
    • 由于标准操作路由是预定义的,因此可以将特定权限分配给 它们位于视图的 权限 字典中,由操作键入(例如 权限['add']='foo'

测试期间的用户登录

这个库提供了一个 flask_webtest.testapp的子类,使设置 测试期间登录的用户:

fromkeg_auth.testingimportAuthTestAppclassTestViews(object):defsetup(self):ents.User.delete_cascaded()deftest_authenticated_client(self):"""
            Demonstrate logging in at the client level.  The login will apply to all requests made
            by this client.
        """user=ents.User.testing_create()client=AuthTestApp(flask.current_app,user=user)resp=client.get('/secret2',status=200)assertresp.text=='secret2'deftest_authenticated_request(self):"""
            Demonstrate logging in at the request level.  The login will only apply to one request.
        """user=ents.User.testing_create(permissions=('permission1','permission2'))client=AuthTestApp(flask.current_app)resp=client.get('/secret-page',status=200,user=user)assertresp.text=='secret-page'# User should only stick around for a single request (and will get a 302 redirect to the)# login view.client.get('/secret-page',status=302)

还提供了一个helper类来设置客户机和用户,给定 在类定义上指定的权限:

fromkeg_auth.testingimportViewTestBaseclassTestMyView(ViewTestBase):permissions='permission1','permission2',...deftest_get(self):self.client.get('/foo')

不使用电子邮件功能

Keg Auth设计为开箱即用,使用电子邮件令牌发送到:

  • 验证用户记录中的电子邮件地址
  • 提供一种初始设置密码的方法,而不需要管理员设置已知密码

虽然这在许多情况下提供了良好的安全性,但有时电子邮件方法 不需要(例如,如果应用程序将在Internet不在的环境中运行 无障碍)。仅需对上述示例进行一些更改即可实现此目的:

  • 离开用户模式
  • 设置authmanager时不要指定邮件管理器

电子邮件/重置密码功能

    < DL>
    电子邮件/重置密码电子邮件中的jwt令牌用
    > UL>
  • 用户名/电子邮件(取决于启用的选项)
  • 密码哈希
  • 上次登录UTC
  • 是否处于活动状态(已验证/已启用组合)
< DL>
这允许令牌在发生以下情况时变为无效:
> UL>
  • 用户名/电子邮件更改
  • 密码哈希更改
  • 用户登录(将更新上次登录的UTC并使令牌失效)
  • 处于活动状态(取决于根据IS_enabled/IS_verified字段计算得出的模型)
  • 欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    安卓如何在java字符串中获取RATE的值   java ANT在哪里输出编译器错误?   在java中,while循环在何处启动对象   javacom。谷歌。格森。内部的LinkedTreeMap无法强制转换到我的类   java单选按钮。isSelected()方法未返回正确的响应   嵌入式系统中applet中的java相对码基字段   如何在eclipse中将Java应用程序附加到jvm探查器?   java为什么Android应用程序崩溃?   在java中拖放上传后保持文件夹结构   爪哇多领导人选举问题   java Springs RestTemplate如何处理postForEntity()中的错误响应   Java如何用前导零递增整数字符串?   java Android将文本作为图像共享给其他应用程序   Java搜索替换   java isDirectory()不适用于UNIX目录   java我们可以得到显示测试类是否通过或失败的TestNG报告吗   Java类对象排序和分组   简单Java幂递归   java在处理MethodArgumentNotValidException时如何访问请求对象?