多因素身份认证 (MFA) 插件:密码认证因素

功能介绍

对用户表扩展密码字段,允许用户通过用户名与密码的方式进行认证,注册。开源IDaaS方舟一账通ArkID系统内置密码认证因素简单配置、马上可用,降低实施成本,提升应用集成效率。

普通用户:

在 “我的 - 认证管理“ 中添加重置密码的功能
在 “注册” 页面实现用户名密码注册
在 “登录” 页面实现用户名密码登录
租户管理员

在”用户管理 - 用户列表“中添加重置密码的功能

配置指南

插件租赁
经由左侧菜单栏依次进入【租户管理】->【插件管理】,在插件租赁页面中找到密码认证因素插件卡片,点击租赁
在这里插入图片描述

认证因素配置
经由左侧菜单栏依次进入【认证管理】-> 【认证因素】,点击创建按钮,类型选择"password",填入相关信息,至此配置完成
在这里插入图片描述

登录界面
在这里插入图片描述

注册界面
在这里插入图片描述

更改密码界面

由用户头像菜单进入【认证管理】界面,选择更改密码标签页
在这里插入图片描述
实现思路
普通用户:注册/登录:
在这里插入图片描述
普通用户:重置密码:
在这里插入图片描述
管理员用户: 重置用户密码
在这里插入图片描述
抽象方法实现

  • load
  • authenticate
  • register
  • reset_password
  • create_login_page
  • create_register_page
  • create_password_page
  • create_other_page
  • create_auth_manage_page
  • check_auth_data fix_login_page

代码

extension_root.com_longgui_auth_factor_password.PasswordAuthFactorExtension (AuthFactorExtension)

Source code in
extension_root/com_longgui_auth_factor_password/init.py

class PasswordAuthFactorExtension(AuthFactorExtension):
    def load(self):
        super().load()
        self.register_extend_field(UserPassword, "password")
        self.register_auth_factor_schema(PasswordAuthFactorSchema, 'password')
        self.register_extend_api(AuthIn, password=str)
        user_key_fields_path = self.register_api(
            '/user_key_fields/',
            'GET',
            self.get_user_key_fields,
            response=List[GetUserKeyFieldItemOut],
        )
        select_pw_login_fields_page.create_actions(
            init_action=actions.DirectAction(
                path=user_key_fields_path,
                method=actions.FrontActionMethod.GET,
            ),
        )

        select_pw_register_login_fields_page.create_actions(
            init_action=actions.DirectAction(
                path=user_key_fields_path,
                method=actions.FrontActionMethod.GET,
            ),
        )

        self.register_front_pages(select_pw_login_fields_page)
        self.register_front_pages(select_pw_register_login_fields_page)

        # 租户管理员:用户管理-用户列表-重置密码
        reset_user_password_path = self.register_api(
            '/reset_user_password/{id}/',
            'POST',
            self.reset_user_password,
            tenant_path=True,
            response=ResponseSchema,
            auth=GlobalAuth()
        )

        user_list_page.add_local_actions(
            actions.OpenAction(
                name='重置密码',
                path=reset_user_password_path,
                method=actions.FrontActionMethod.POST,
            )
        )

        # 初始化部分配置数据
        tenant = Tenant.platform_tenant()
        if not self.get_tenant_configs(tenant):
            config = {
                'login_enabled_field_names': [{'key':'username'}],
                'register_enabled_field_names': [{'key':'username'}],
                'is_apply': False,
                'regular': '',
                'title': '',
            }
            self.create_tenant_config(tenant, config, "default", "password")
        try:
            admin_user = User.active_objects.filter(username='admin').first()
            if admin_user:
                admin_password = UserPassword.active_objects.filter(target=admin_user)
                if not admin_password:
                    admin_user.password = make_password('admin')
                    admin_user.save()
        except Exception as e:
            print(e)

        self.listen_event(
            CREATE_TENANT,
            self.create_tenant_event
        )

    def create_tenant_event(self,event,**kwargs):
        tenant = event.tenant
        config = {
            'login_enabled_field_names': [{'key':'username'}],
            'register_enabled_field_names': [{'key':'username'}],
           
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值