文章目錄
  1. 1. 何为登陆
  2. 2. 何为认证 authentication
  3. 3. 不同的认证方式
  4. 4. 最常见的情形

给文章起了一个高大上的名字,主要是想写一下对于http协议中用户登陆之后,如何进行用户身份跟踪,以及不同的实现方案可能存在的安全问题。

何为登陆

login维基百科上解释是一个用户通过认证获得一个系统的访问权限的过程。感觉更多的是一种业务上的描述,在讨论安全架构设计的时候都是使用identity,authentication等词语描述。

何为认证 authentication

不同的认证方式

认证有不少协议,参考Basic access authentication

最常见的情形

在web应用中,通常都是web表单提交用户名密码的方式实现登陆。登陆之后,服务端会写一些信息到cookie中,以后的访问通过cookie中的信息来识别该请求的来源用户身份。

在比较早的应用中还可以看到服务端将用户名和密码保存在cookie中,服务端对每个请求,都会验证验证cookie中的用户名和密码是否正确。这种实现方案虽然在功能上实现了保持用户的身份状态。但是有比较高的安全风险。现在基本上很少见这种实现了。

目前最常见的两种方式,一种是使用sessionID的方式来跟踪用户,一种是将加密后的用户id或者用户id和密码保存在cookie中。以前我一直以为使用sessionID的方式才是最佳实践,把用户信息加密之后放在客户端是一种违背了安全设计思路的事情。但是看到Codeigniter作为流行的框架,也是采用了这种设计。

其实仔细思考一下,可以认为这是两种不同的设计方式,各有优劣,只要设计得当,都可以做到安全。采用sessionid的方式一定要有一个集中的管理session数据的中心,而采用加密算法的方式可以认为是将数据查询的过程转化成了cpu操作的加解密。这样子就不需要依赖集中的数据中心可以方便的实现分布式。

使用sessionid的方式,需要一个中心管理session数据

使用加解密用户数据的方式维持登录状态不需要数据查询,只需要cpu加解密操作就可以。

文章目錄
  1. 1. 何为登陆
  2. 2. 何为认证 authentication
  3. 3. 不同的认证方式
  4. 4. 最常见的情形