若是你问我人类能从其余物种中脱颖而出,最重要的能力是什么?我会说是“抽象的能力”。简单来讲,就是隐藏底层细节、操做表层接口实现目标的能力。 尤瓦尔·赫拉利在《人类简史》中说:人和其余物种的根本区别在于想象力。咱们可以透过现象看本质,把繁琐复杂的具体过程封装起来,“抽象”成简单易用的接口,以后其余人想要理解这件事,就不须要再深刻到细节里面了,只须要看暴露的接口便可。git
人类发展历史上有几个足以改变人类的抽象概念。 第一,数字。从羊群这个具体的概念到数字这个抽象的概念,是具备划时代意义的。若是没有数字,三个苹果和三个梨子是没有任何关联的,咱们也就没法从天然现象中找到任何规律了。 第二,国家。国家是咱们想象出来的一个概念,你们都承认,才能朝着一个一致的目标前进,人类的集体能力就体现出来了。 第三,货币。货币是一个极其强大的工具,咱们说的“有钱能使鬼推磨”就是这个意思。这里的货币不是特指某一种金钱,而是对付出的劳动的一种抽象承认。货币使得咱们没必要任何事情都要事必躬亲,我只要用货币支付必定的劳动报酬,这大大下降了我的的复杂度。github
科学里的抽象就更普遍了,咱们能够认为全部的科学理论和定理都是一种抽象。物体的质量是一种抽象,它不关注物体是什么以及它的形状或质地;牛顿定律是对物体运动规律的抽象,咱们如今知道它不许确,但它在常规世界里,却依然是一个至关可靠的抽象。在科学和工程里,经常须要创建一些模型或者假设,好比量子力学的标准粒子模型、经济学的理性人假设,这些都是抽象。甚至包括如今 AI 里经过训练生成的模型,某种程度上说,也是一种抽象。web
抽象无处不在,能够说没有了抽象,现代人生活步履维艰。咱们人人都使用手机,可是没有几我的知道手机的工做原理是什么,事实上咱们也根本不关心。咱们天天都乘坐各类交通工具,可是历来没操心过轮子究竟是怎么转起来的。咱们叫清洁阿姨上面打扫卫生,咱们只须要支付相应的酬劳就好了,至于她是怎么坐车过来的,用的是哪款洗洁精,咱们不须要操心。 以上这些,抽象一下,咱们就能够把一件事情分红三个部分:编程
若是你再往下仔细想一想,抽象是一层接一层,没完没了,越往下暴露的复杂度越高。光从生产洗衣粉这件事来讲,具体的复杂度高吗?很高,这里面牵涉到了复杂的化学原理,制造工艺,外行很难彻底搞明白。可是你说购买使用洗衣粉复杂吗?很简单。那是由于洗衣粉制造商为咱们把去除污渍这件事的复杂度给咱们抽象掉了。浏览器
咱们小时候上政治课,讲到经济全球化,咱们的平常生活都是创建在全球分工合做基础上的。分工合做,分为两部分:一方面要分工,知道什么事情须要本身作,什么事情须要交给别人作;另外一方面须要合做,这要清晰地定义好交互边界上的交互行为,约定好信息的含义和格式。安全
细细品味一下分工合做这件事,理想的状况下,咱们都在努力促成一个大目标的达成,可是咱们不须要也不必关心对方的行动细节,对方具体是怎么作的不重要,我只须要调用对方在领域边界上暴露给个人抽象层就好了。bash
学过计算机的对“抽象”这个概念应该都不会陌生,计算机科学领域有句名言: 计算机科学领域的任何问题均可以经过增长一个间接的中间层来解决。 这个“间接的中间层”,就是一个抽象层。服务器
比方说 Web 开发,咱们开发过程当中使用的 Web 框架和高级抽象语言,算是比较高的抽象层次了,对于大部分开发者来讲,咱们的业务逻辑位于这个抽象层。这一层往下,是低级语言,好比 Python 底层实际上用的是 C 语言。再往下,是操做系统,操做系统这一层暴露了最基本的文件操做、socket 接口。操做系统往下,是硬件,硬件也有接口,只不过从出厂那一刻起就已经焊死了。咱们的数据到了服务器网卡这个位置,须要传到用户的电脑上了,这时候来到了 TCP/IP 协议这一层,IP 协议确保了咱们的数据不会跑错地方,TCP 协议确保咱们的数据能完整且以正确的顺序抵达。这还没完,要把字符成功显示在用户的浏览器上,还要通过不少抽象层呢,咱们就不一一罗列了。用软件开发者的话来讲,这就是不关心底层实现细节,只面向接口编程。正式这样一层一层地抽象和封装,才使得咱们如今编写程序变得极其简单。session
从为用户抽象掉部分复杂度来讲,咱们和阿里云作的其实是一回事。阿里云的 IaaS 平台把管理物理机房的复杂度抽象掉了,让咱们这些软件从业者不须要为硬件操心;Authing 就是致力于帮助开发者把身份认证的复杂度抽象掉,让开发者不用操心诸如密码安全、单点登陆、用户增加分析这些重要可是琐碎的事,腾出精力作真正有业务产出的核心业务。正如你很难自建机房而且达到阿里云的水准同样,你也很难在有限的时间和资源的前提下把身份认证这件事作的和 Authing 同样好。app
层次越高,开发效率越高,创造的价值越大。Authing 经过本身对身份认证领域的认知,把身份认证这件很复杂的事情抽象成了一系列规范的步骤,提供 user-friendly 的 SDK 和美观的后台控制台,帮助开发者下降系统的总体复杂度。 Authing 内置了不少实用的 Feature,好比
登陆热点图
用户地理位置分布
易用美观,五行代码便可集成的登陆表单
支持各类社会化登陆是一种很费时的重复性劳动,Authing 容许你在后台自定义所要支持的社会化帐号服务商,真正的一键开启、0 行代码:
这些至少是上千行的代码量,一个月人天的工做量。
再看看 Authing 是怎么实现单点登陆的:10 行代码,完成须要数千行代码才能完成的任务。
const authing = new AuthingSSO({
appId: "5d70d0e991fdd597019df70d",
appDomain: "sample-sso.authing.cn"
});
const res = await authing.trackSession();
if(!res.session){
// 未登陆,执行登陆逻辑,这会调起 Authing 的登陆表单
authing.login()
}else{
// 已经登陆,打印用户信息
console.log(res)
}
复制代码
注:相关源代码能够在此 GitHub 仓库找到:github.com/Authing/web…
前面说过,Authing 在身份认证领域持续耕耘,已经把身份认证这件事情抽象成了不少个规范的过程,Authing 后续会全面支持函数计算,让开发者经过插件化的方式,全流程自定义化。
Authing 目前支持 OAuth二、OIDC、LADP、 SAML 等主流身份协议,协议一直都在演进,可是开发者对身份认证的需求一直没变:那就是安全稳定、简单高效、终端用户体验良好。对于开发者来讲,底层的协议变化是一个不重要的细节,就像你开的汽车究竟是用电仍是用油同样。
就像你的确能够自建机房同样,这些东西你的确能够本身作,可是从投入产出比来看,未必值得。
咱们都是站在前人的肩膀上继续前进,利用好前人提供给咱们的抽象层,没人会试图抛开一切已有的资源从零开始,也只有这样人类文明才能不断进步。
身份是一个看上去简单其实很复杂的事情,这件事至今仍未获得很好的解决,这也是咱们坚持将 Authing 作好的缘由。咱们是一个链接器,会将全球的平台都链接起来,这也是咱们伟大使命的一部分。