如何更好的理解登录

01:06

框架问题实际上解决的是生活中的问题。

登录有两个很重要的概念:Principle(人) 和 Credential(密码、刷脸)。

权限领域主要是解决两大问题:Authentication(认证问题) 和 Authorization(授权问题)。

门票、刷脸等都可以被称为一个认证对象。

05:31

Authentication 是一个接口,接口对应一个抽象的令牌。

对一个门口,存在一个门卫,只处理工作证。

对另外一个门,可能存在一个门卫,只处理门票。

在 SpringSecurity 中,用 filter 来代表每一个入口。

Filter1 专门用来处理门票,Filter2 专门用来处理工作证,Filter3 专门用来处理指纹。

那假如一个人由一张票,那么应由谁来处理呢?由 Provider 来处理,即 Provider 对应认证处理 token。具体表现为每个 filter 找到对应处理的 provider 来处理。

12:28

每个 filter 都要去找 provider 会非常麻烦,有一个设计模式称为门面模式。

在程序中,通常使用 ProviderManager 来管理和协调。

除了 ProviderManager 外,还有一个 AuthenticationManager,用来找到 ProviderManager。

16:02

领域设计=面向对象设计

认证就是 Token -> filter -> provider。

授权也是如此,即把 provider 提供的结果放入上下文中。

对于授权,会有一个 AccessManager(访问控制器) 的概念,即授权认证通过了,需要根据上下文进行访问控制。

AccessManager 会抽象出一个 Voter(投票器)的概念。

Voter 执行多数通过策略或一致通过策略,这在代码中通常通过 @Securied@PreAuth 注解来实现。

21:04

用户在输入用户名和密码在登录后会得到一个 token。

相当于用户看比赛中途想要到场外上厕所,这时候工作人员给用户颁发了一个临时通行证。

再回来后,就需要临时通行证(token)来认证。

24:16

oauth 相当于再加一个门。