在对接自有账户体系时,FinClip 怎么做的?

news2025/1/11 10:17:42

以下文章来源于 FinClip (凡泰极客)
作者:王字 Wannz

FinClip 是 Authing 的合作伙伴之一,致力于帮助企业打造更高效的一站式数字内容管理平台,旨在降低内容与渠道所形成的内容矩阵管理成本。前不久我与售前同事聊天,他们反馈说很多客户在前期了解产品的时候,都会问这样一个问题「你们的 FinClip 支持与我们自己的用户体系打通吗?」

实际上这确实也是老生常谈的问题,随着公司规模越来越大,员工需要使用的产品矩阵也会越来越丰富,不仅包括内部的 IT 系统,OA 系统,业务系统,还会有很多和外部产品集成的登录流程,更别提各种业务系统或者子系统中的账户体系了。如果使用简单粗暴的方法,让员工在每一个系统中单独注册一个独立的账户,不仅员工的用户体验简单粗暴,也会陡然提升员工密码管理的相关成本。

在开始本篇文章之前,我想先与大家聊聊,什么是账户体系认证。

01.什么是账户体系认证?


不论是在哪个产品中登录自己的账户,你可能都需要通过输入自己的手机号,用户名,邮箱或者工号的方式登录到这个产品之中(扫码其实也是一种方式)。但是在这个过程中我们为什么需要输入自己的相关信息呢?

其实在这个过程中我们主要是为了解决以下三个问题:

这三个问题是非常重要的,因为他们构成了在账户体系中身份认证和授权的基础要素,我们先尝试来分别解答这三个问题:

我是谁?
这个问题关注的是用户或系统的身份标识。在一个服务端账户体系中,你需要确保每个用户或系统都有一个唯一的标识符,通常是用户名、电子邮件地址、用户 ID 或其他独一无二的信息。这个标识符用于识别和区分不同的实体。身份验证的第一步就是验证这个标识符是否有效,并确定它对应的用户或系统。

我有什么权限?
这个问题涉及到用户或系统被授予了什么操作或资源访问权限。权限可以分为多个级别,从只读权限到完全控制权限等。在服务端的账户体系中,通常会使用角色(roles)或权限组( permission groups )来管理权限。用户或系统被分配到一个或多个角色或组,每个角色或组都定义了一组具体的权限。确保在身份验证后,根据用户或系统的角色或组确定其可访问的资源和执行的操作。

我属于什么组织?
这个问题关注的是用户或系统的组织隶属关系。在许多应用中,用户可能属于一个或多个组织,这些组织可以是公司、团队、部门等等。组织通常用于管理资源的访问和共享,以及确定用户在组织内的角色和权限。确保你的账户体系可以处理多个组织和用户在这些组织之间的关系,以便正确授权和限制资源访问。

02.如何对齐管理后台中的账户体系?


我们处理账户体系的主要任务是确保系统中的账户、角色权限、组织等信息与需要集成的系统中的相关字段能够协同工作,以实现身份验证和授权功能。业界中已经有非常专业的问题解决思路了,比如这几种方法:

单点登录 SSO
SSO 是一种常见的解决方案,允许用户在多个系统之间使用单一的身份验证凭据进行登录。通过使用标准协议(例如 OAuth、SAML、OpenID Connect 等),我们就可以将账户体系与需要集成的系统相连。在连接完毕之后,一旦用户登录了一个系统,他们就可以无需重新登录访问其他系统。
API 集成
我们也可以设计一组 API,用于管理用户、角色、权限和组织等相关信息。这些 API 可以用于创建、更新、删除用户帐户、分配角色、分配权限以及管理组织结构。其他系统可以通过调用这些 API 来实现与账户体系的互操作。
数据同步映射
有些特殊的系统可能会存在一些当前业务中所需要的业务字段,因此我们还需要考虑通过数据同步和字段映射可以用来维护不同系统之间的一致性。通过定期同步用户、角色、权限和组织等数据,确保它们在不同系统中保持一致。当然,数据同步的前提是我们需要根据定义字段映射规则,以确保不同系统中的数据可以正确匹配。
中心化人员管理
如果可能的话,我们也能够尝试去建立一个中心化的身份管理系统,这个系统负责管理所有用户、角色和权限。其他系统可以与这个中心化系统进行集成,以便统一管理身份信息。这种方式可以减少数据不一致性的问题,并简化维护。
当然,不论我们最终选择了哪一种账户体系对齐的方法,都需要考虑能够在与自有业务体系集成以外,提供足够的代码与业务审计机制,以便用于应付后续可能的审计与日志留存能力,万一在出现任何异常或未经授权访问时查证对应的问题。


03.FinClip 的管理后台账户对齐方式


正如同上文所说,我们在向一些私有化客户提供相关服务时,会分别采用“数据同步”或“实时校验”的方式解决账户体系对齐。当然由于不同客户的业务环境与内部业务水平不一,我们也分别整理出了两种方式的优势,以及需要考虑的相关风险。

方案一:数据同步
这种方式需要客户基于 FinClip 提供的 OpenAPI 与相关服务,将对应的账户信息同步在我们所提供的服务之中,最终通过统一的账户体系完成账户鉴权与登录操作。

这种方式具有这些优势

  • 较好的性能与时间优势:数据已经同步到了 FinClip 服务中,在实际使用和查询时的耗时较少,效率较高。
  • 离线支持:数据已经同步到了 FinClip 服务中,即使客户的账户对接系统失效,最终用户也依然可以完成操作与访问请求。
  • 减轻集成方负担:客户只需要定期同步数据,不再需要考虑实时请求。


当然,采用这种方式我们也需要考虑这些风险

  • 数据同步可能延迟:数据同步可能会有一定的延迟,在某些情况下可能不会立即反映出最新的账户信息。
  • 需要定期同步保证数据一致:需要定期同步和更新数据以确保一致性,但可能会引入一些同步问题。
  • 可能存在安全性风险:在数据同步期间,账户信息可能会存在风险,需要确保数据的保密性和完整性。

方案二:实时校验
这种方式需要 FinClip 通过客户提供的账户接口完成账户校验的相关工作,在获得账号相关信息后完成登录。

这种方式具有这些优势

  • 实时性较高:FinClip 能够随时请求到最新的账户信息,保证了较高的实时性。
  • 精确控制:在具体业务中可以精确地请求和获取账户中的相关信息,而不是对整个数据内容进行同步。
  • 降低数据冗余:FinClip 中不再需要单独存储账户中的相关字段数据,减少了数据冗余和一致性的相关问题。
    当然,选择这种方式我们也需要考虑这些风险:
  • 性能和响应时间不确定:实时校验可能导致延迟,特别是在高负载情况下或者集成方的系统响应较慢时。
  • 对客户集成系统的依赖较高:服务高度依赖于集成方的稳定性和性能,如果集成方出现故障或者延迟,可能会影响到 FinClip 的服务和相关能力。
  • 可能需要频繁调用:如果需要频繁访问账户信息,可能会导致过多的请求,增加了集成方的负担。
    总的来说,选择哪种方式取决于客户自有业务或 IT 系统中的需求和系统架构。假如说对实时性要求较高,就可以考虑“方案一,实时校验”。如果性能和可用性更重要,或者需要处理大量数据,“方案二,数据同步”可能更合适。

当然,在我们的实际经验中,也发现有一些客户没有选择标准协议进行对接,而是基于自有的业务场景和能力封装了一套“非标账户协议”。但不论选择标准协议还是非标准协议,这里的对接思路都差不多,即:
标准协议对接

拿到 accountID 唯一标识(基于 OAuth/SAML/OIDC 对接)

  • 用户登录:基于标准协议进行用户身份校验后登录
  • 用户角色:基于预先配置获得用户角色,用户可以自行修改/账户集成系统中自带角色管理能力
    非标协议对接

通过 token/账密/客户使用 API 先行创建接口

  • 用户登录:基于对应参数进行用户身份校验后登录
  • 用户角色:基于预先配置获得用户角色,用户可以自行修改/账户集成系统中自带角色管理能力
    通常,在实际应用中,可以综合考虑两种方式的优缺点,或者根据不同的用例选择不同的集成方式。最重要的是确保数据的一致性、安全性和可用性。


04.FinClip 的小程序账户对齐方式


在我们聊完了管理后台中的账户对齐方式后,也不妨来聊聊在“小程序业务”中,用户账户对齐的常见问题吧。

由于小程序大多时候都会作为某个宿主 App(或设备) 中的功能模块存在,因此在小程序中的登录方式一般都会基于宿主 App(或设备) 中的账户进行修改,并不会在小程序中再次出现和 App 中一模一样的登录页面。
在我们熟知的微信小程序中,一般会在小程序端调用 wx.login 获取用户 code,然后再通过服务端验证的方式调用。
在 FinClip的场景中我们也提供了丰富且灵活的用户授权方式供不同类型的开发者选择,不论哪种开发者都能够基于 FinClip 获得灵活的小程序账户对齐能力。

方案一:服务端改造
服务端改造的使用场景主要是“客户基于 FinClip 打造自有小程序生态,但无法具备小程序的代码管控的相关能力”,在这种情况下使用服务端改造的方式较为适宜。

在这种情况下,客户需要在以下环节中投入相关的改造成本:

  • 第一步:在 App 中通过自定义 API 注入 wx.login 方法,按照微信小程序的格式返回 code;
  • 第二步:小程序无需改动,按照在微信端的实现,此时会将 code 发送给开发者的服务器;
  • 第三步:开发者服务器进行适配,通过 code 可判断登录来自 FinClip 平台,从 code 中解析出 UserID,返回自身账户体系的内容即可。


方案二:服务端改造+微信授权
服务端改造与微信授权集成的场景主要适用于“客户通过 FinClip 完成原有 App 中相关功能的拆分。实际工作过程中所有的小程序都是由自有研发团队进行修改与集成的。”


在这种情况下,客户需要在以下环节中投入相关的改造成本:

  • 第一步:SDK 中集成微信开发平台 SDK;
  • 第二步:使用自定义 API 注入 wx.login,唤起微信授权后即可取得返回 code,此时可能需要对 code 拼接唯一标识;
  • 第三步:小程序无需改动,按照在微信端的实现,此时会将 code 发送给开发者的服务器;
  • 第四步:服务端根据 code 唯一标识,调用不同的授权接口取得 OpenID,查询登录态返回;
    请注意由于微信限制不同主体,不同开放平台下的 OpenID 是不一致的,此时小程序需要关联到同一主体,或者同一开放平台(此时唯一标识为 UnionID)。

方案三:小程序改造
小程序改造的使用场景主要是客户目前已经有可用于生产环境中的小程序,但需要对小程序中的内容进行逻辑修改,增加环境变量的方式(比如通过 wx.login 或类似 wx.loginFinClip 之类的自定义 API)进行判断(当然,这种情况下也需要具备小程序代码编辑的能力)。

这种情况下,主要需要在自有 App 中通过自定义 API 注入 wx.login 来获得当前用户的登录态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线制作课程表

失业在家,开启一天一个应用的创作节奏,最近学了uniapp,特别想做点啥,正好家里小孩子要打印课程表,而且课程表还有调课的需求,就寻思做一个方便大家,到目前位置服务完全免费的,新鲜上…

MySQL数据库基本操作-DQL-排序查询

介绍 如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 order by 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。 语法 select 字段名1,字段名2,…… from 表名 order by 字段名1 [asc|desc]&#xf…

腾讯云新用户专享便宜云服务器有哪些?如何购买?

在云计算市场竞争激烈的今天,各大云服务提供商为了吸引更多用户,经常推出各种优惠活动。腾讯云作为国内领先的云计算服务提供商之一,也不例外。本文将为大家介绍腾讯云新用户专享的便宜云服务器,以及如何购买。 腾讯云新用户专享便…

3.1 使用点对点信道的数据链路层

思维导图: 前言: **第3章 数据链路层笔记** --- **概述**: - 数据链路层在计算机网络中是较低的层级。 - 主要有两种信道:点对点信道与广播信道。 - 局域网(LAN)位于数据链路层。 --- **1. 信道种类**…

C++ stack和queue模拟实现

目录 stack习题练习逆波兰表达式求值基本计算器 stack模拟实现queuequeue模拟实现deque了解priority_queuepriority_queue模拟实现仿函数 stack stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提…

阶段六-Day02-Maven

一、学习Maven 使用Maven创建Web项目,并部署到服务器。 二、Maven介绍及加载原理 1. 介绍 Maven是使用Java语言编写的基于项目对象模型(POM)的项目管理工具。开发者可以通过一小段描述信息来管理项目的构建、报告和文档。 使用Maven可以…

Supervised Contrastive Pre-training for Mammographic Triage Screening Model

方法 品红色箭头表示将生成的孪生编码器分别迁移到单视角学习模块和双视角学习模块

C语言--文件操作详解(2)(文本文件和二进制文件,文件读取结束的判定,用函数进行文件的拷贝,文件缓冲区)

前言 本篇文章主要介绍了文本文件和二进制文件,文件读取结束的判定,如何使用函数进行文件的拷贝,文件缓冲区的相关知识。 以及具有保存功能的八功能通讯录的源码。 文章目录 前言1.文本文件和二进制文件2.文件读取结束的判定2.1 被错误使用…

Modality-invariant Visual Odometry for Embodied Vision 代码复现

代码地址 https://github.com/memmelma/VO-Transformer/tree/dev 环境配置 1.拉取github库 git clone https://github.com/memmelma/VO-Transformer.git cd VO-Transformer/2.创建环境 创建environment.yml name: vot_nav channels:- pytorch- conda-forge dependencies:-…

gpio内部结构(一)

一,GPIO内部结构 1,保护二极管 * 引脚内部加上这两个保护二级管可以防止引脚外部过高或过低的电压输入。 * 当引脚电压高于 VDD_FT 或 VDD 时,上方的二极管导通吸收这个高电压。 * 当引脚电压低于 VSS 时,下方的二极管导通&…

Linux 文件链接

Linux 下的文件链接有两类。一个是类似于 win 电脑的快捷方式,我们称为软链接,软链接也可以叫做符号链接。另一种是通过文件系统的 inode 连接来产生的,类似于 windows 电脑的复制,但是不产生新的文件,我们称为硬链接。…

2023.10.10

运算符重载 类外函数实现&#xff1a; #include <iostream>using namespace std;class Good {//算数friend const Good operator*(const Good &L,const Good &R);friend const Good operator(const Good &L,const Good &R);friend const Good operator…

【网络豆送书第五期】Kali Linux高级渗透测试

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 公众号&#xff1a;网络豆云计算学堂 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a; 网络豆的主页​​​​​ 本期好书推荐&#xff1a;《Kali Linux高级渗透测试…

在Openresty中使用lua语言向请求浏览器返回请求头User-Agent里边的值

可以参考《Linux学习之Ubuntu 20.04在https://openresty.org下载源码安装Openresty 1.19.3.1&#xff0c;使用systemd管理OpenResty服务》安装Openresty。 然后把下边的内容写入到openresty配置文件/usr/local/openresty/nginx/conf/nginx.conf&#xff08;根据实际情况进行选…

vue使用localstorage超出限制解决方法

最近在项目中&#xff0c;遇到一个报错&#xff0c;QuotaExceededError: The quota has been exceeded。如图&#xff1a; 搜索了一下&#xff0c;结合项目代码&#xff0c;得到的结论是localStorage超出5M限制了&#xff0c;项目中使用了vuex-persistedstate插件&#xff0c;…

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列模型的进化版本。YOLOv5是由Ultralytics开发的&#xff0c;基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

win11安装IIS步骤-已验证23.10.10

IIS服务使用 步骤一&#xff1a;打开控制面板 通过 控制面板— 程序— 启用或关闭Windows功能 — 选择Internet Information Services默认安装IIS&#xff0c;如下图步骤所示 步骤二&#xff1a;打开IIS服务 建议根据下图勾选&#xff0c;建议全选安装&#xff0c;以便后续发…

计算机算法分析与设计(9)---0-1背包问题(含C++代码)

文章目录 一、概述1.1 问题描述1.2 算法思想 二、代码2.1 题目描述2.2 代码编写 一、概述 1.1 问题描述 1. 0-1背包问题&#xff1a;给定 n n n 种物品和一背包。物品 i i i 的体积是 v i v_i vi​&#xff0c;其价值为 w i w_i wi​&#xff0c;背包的容量为 c c c。问应…

winform窗体控件太多显示不过来,怎么实现滚动条

winform窗体控件太多显示不过来&#xff0c;怎么实现滚动条 Winform Panel实现滚动条 一、创建panel 在界面上拖拽一个父级Panel1&#xff0c;然后在Panel1里面拖拽一个子级Panel2 设置父级Panel1的AutoScroll属性为True 属性设置好后&#xff0c;当子级高度或者宽度大于父…

promtail multiline 堆栈日志处理

找到自己的promtail.yaml中job_name段落&#xff0c;增加multiline段落&#xff0c;下面文件只是部分内容&#xff0c;只需要修改firstline后面的正则表达式匹配日志行首&#xff0c;如果堆栈换行后不是此格式行首&#xff0c;将自动把堆栈的行合并到上一行中。 - job_name: k…