0
点赞
收藏
分享

微信扫一扫

身份验证的那点事

      我觉得原作者写得已经很好了,所以可以直接看链接。

​​https://www.cnblogs.com/uoyo/p/13209685.html​​ 

      我们围绕着问题来看看身份验证原理的发展史。

初代验证方案

       在web中,最基础的验证方案就是每次访问web时,都带上用户名密码这些标识验证信息,比如

http://ourBusinessWebServer/Get?user='Me'&pass='12345678'

      web服务器每次对于请求都会检查user和pass字段信息,检查验证通过后,才会后续处理。

      这个方案可以解决验证登陆问题,但是... 信息都在url中,人眼都可以看到,非常不安全。


1改

     既然把数据放在url里面不安全,那就放到Http 的request header中,例如 Authorization属性。

Authorization:Me:12345678

     如果觉得这样还是明文显示,那么可以简单地用base64编码加密一下。


2改

      如果验证信息特别多,实际上就可以增加一个cookie,web端维护改cookie,并将改cookie和登陆验证信息进行一一对应,后续客户端请求只需要带上这个cookie,即可认为是合法用户,避免了每次对验证信息进行验证。

       至此,单体程序下,验证足够使用了。如果需要安全地通信,可以使用https。



身份信息自包含的验证方案

       初代验证方案,在单体验证环境下,基本就可以解决很多问题了。但是在现在2022年的微服务架构下,验证服务在一台web服务器上,很多个业务线的web服务在其他不同的服务器上,这些业务都会使用相同的验证服务。

假如, A服务器为登陆验证服务,B服务器为业务服务。

身份验证的那点事_身份验证

现在的验证模式就会如下:

  1. 我们在浏览器中输入B的Url,由于没有登陆验证过,请求中没有对应的cookie,B服务会检查发现没有Cookie,此时会重定向到登陆验证服务的Url给客户端,并且在这个Url中会有后续回调Url,这个回调Url为B的登陆验证Url。
  2. 浏览器收到重定向登陆A服务的Url,一般是一个类似QQ第三方登陆的界面,点击确定提交给A服务,A服务对提交的登陆用户信息进行验证,若验证通过,会返回一个包含用户各种身份信息的Token,改Token通常是加密和签名的数据,返回的Url即为上一部中的回调Url,加上这个Token。
  3. 浏览器收到返回的信息,发现是重定向请求,于是将请求重定向到B服务的登陆验证Url。
  4. B服务收到请求,检查是否有Token,根据设置好的解析Token的对应公钥进行解析出身份信息,并将其存入自己的内存中,同时生成一个Cookie与这些信息进行对应,该Cookie传送给浏览器。
  5. 浏览器收到B服务的Cookie信息,后续访问B服务的资源,只需要请求中带有Cookie即可。


实际上,这种验证方案,和初始验证方案解决的问题是一样的,只是解决过程中,由于调用第三方或者远程验证服务,引入了更多环节而已。JWT Bearer基本就是如上方式。



举报

相关推荐

0 条评论