本文主要描述:
面向对象的需求分析方法论
一. 需求举例
假设,你正在参与开发一个微服务。微服务通过 HTTP 协议暴露接口给其他系统调用,其实,其他系统通过 URL 来调用微服务的接口。
二. 对案例进行需求分析
针对鉴权这个功能的开发,我们该如何做需求分析?
1. 第一轮基础分析
最简单的解决方案就是,通过用户名 + 密码来做认证。
给每个允许访问我们服务的调用方,派发一个应用名(或者叫应用 ID、AppID)和一个对应的密码(或者叫秘钥)。调用方每次进行接口请求的时候,都携带自己的 AppID 和密码。微服务在接收到接口调用请求之后,会解析出 AppID 和密码,跟存储在微服务端的 AppID 和密码进行比对。如果一致,说明认证成功,则允许接口调用请求;否则,就拒绝接口调用请求。
2. 第二轮分析优化
因为密码是明文,暴露给了网络,所以是不安全的。
加密算法
那如果我们借助加密算法(比如 SHA),对密码进行加密之后,再传递到微服务端验证,是不是就可以了呢?
实际上,这样也是不安全的,因为加密之后的密码及 AppID,照样可以被未认证系统(或者说黑客)截获,未认证系统可以携带这个加密之后的密码以及对应的 AppID,伪装成已认证系统来访问我们的接口。这就是典型的“重放攻击”。
提出问题,然后再解决问题,是一个非常好的迭代优化方法。
借助 OAuth 的验证思路