auth
Why Authentication

为何需要认证

因何认证?

任何一个孤立的系统应对外部的输入时,为了克服外部的 不确定性 ,就会有进行校验的需求。从基础说,一个静态类型系统就进行了最简单的校验,如一个函数,指定了参数的类型为string,如果你在调用这个函数时传入了int型的参数,编译时就会报错;再进一步,测试系统也是在校验(无论是单元测试还是端到端的测试);再进一步,后端需要对任何请求的参数进行校验;再进一步,后端需要对每个请求对应的身份进行校验(也就是本文要讲的认证)。

编译时发生的校验

静态类型系统,以及测试系统是为了克服人所带来的不确定性,为什么这说呢?其最核心的原因是人是有限的,即一个人在某个时刻无法完完整整地把握一个孤立的系统,就拿我正在写的后端为例,最常见的就是写着写着就忘了自己写的这块的逻辑到底是怎样的,这个函数到底该传递什么类型的参数。此时就需要静态类型语言的编译器发挥作用了,vscode编辑器会利用typescript编译器提示你该处应传递string类型的参数,然后你对你写的某个模块的逻辑也可以通过单元测试进行验证。如此,便可克服掉人自身的限制带来的不确定性。

运行时发生的校验

运行时发生的认证其实也就是后端很大一部分的工作量,即如下两种校验:

  • 对传入的每个参数进行校验
  • 对每个请求的身份进行校验(即认证)

当做完这些校验,你就可以消除前后端两个孤立的系统的外部性,将两者看作是一个系统。参数校验暂不讨论,身份认证通常通过 对称加密非对称加密 ,以及 散列加密 的方式来进行。

理想情况

可以设想一下,如果所有数据库的状态和后端的逻辑都放在前端,整合成一个前端的大型孤立系统,那么为了消除前后端之间,后端与数据库之间的外部的不确定性,以及解决每个系统之间类型的不一致,所作出的努力与所耗的时间将不复存在,可惜不能。