首先简单了解下密码模式的做法
密码模式一般被应用于互相信任的内部系统,比如公司内部OA系统可以通过密码模式请求认证中心进行认证,步骤不会像授权码模式那么麻烦,不过用户的账户和密码还是归认证中心管理的,所以如果我们允许用户通过密码模式认证,那么用户就得知道维护在认证中心的账户和密码信息。
为什么不建议使用密码模式
认证中心统一维护和存储用户的账户和密码等数据,如果允许内部系统用密码模式来登录的话,那么内部系统的人就肯定得知道账户和密码了。我们可以想一想,假设微信是一个很大的认证中心,内部有个系统要接入微信登录,我们会选择把微信的账户和密码对这个系统开放,以此来支持密码模式么,很显然不可能,此时只要有开发在代码中留下后门,那么很可能内部用户在登录系统的同时,也会泄漏了自己的微信账户和密码。我们反向思考下,如果越少的人知道账户和密码,是不是我们的账户就会越安全,同理,作为统一认证中心,越少的客户端知道账户和密码,认证中心是不是就越安全。
还有一点就是,一开始客户端选择使用密码模式来登录,后续会不会加上验证码功能,手机号登录,邮箱登录等等,那么我们就得对该模式进行改造,用户认证需求一变化,我们代码就得跟着变化,这就有点违背了开闭原则了,而如果我们使用授权码,不仅安全,而且由于客户端和认证中心的协议是固定的,就意味着交互流程是固定的,那么此时认证需求的修改只需要改认证中心的代码,并不需要修改客户端代码。
总而言之,就是密码模式不安全而且不易扩展。