身份声明还需要证据

用户名或账号名通常是声明,密码、持有的认证器等可作为验证凭据。服务端按规则检查凭据后,才能决定是否接受这个账号身份,不能把知道用户名当作认证成功。

例如两位同事都能说出管理员账号名,但这不会让他们自动拥有管理员身份。认证需要验证控制相应凭据的能力,至于账号是否绑定现实中的特定人,是另一层身份核实问题。

一眼看懂 / 示意图

登录过程中的三个问题

  1. 01声明

    声称使用哪个身份

  2. 02认证

    凭据是否足以支持该声明

  3. 03授权

    该身份可以对这个对象做什么

认证成功不意味着所有操作都被允许。

认证成功与持续登录分两步理解

初次验证通过后,网站往往建立会话,后续请求使用会话凭据避免每次重新输入认证信息。会话过期或被撤销后,旧标识就可能不再被认可。

认证方式还可以组合不同因素,但把同一个密码重复输入两次并不自然变成两种独立因素。具体安全程度依赖设计与实现,不应只数界面上弹出了几次输入框。

能登录,不代表能查看所有东西

一个普通成员通过认证之后,仍可能只能查看自己的草稿,不能修改他人的资料。是否允许该操作需要授权规则,不能把“已登录”当作所有资源的通行证。

服务之间也可以需要认证,并非只有人登录网站才有这个步骤。无论对象是用户还是程序,都应明确核验的身份范围、凭据保护方式,以及失败或过期时如何处理。