fdzang

1.需求

最近在尝试着写一个开放平台,于是先搭建网关。

作用:统一的请求入口,完成对请求的跟踪,限流(未做),鉴权,分发,封装响应

2.工作原理

2.1.请求

在开放平台中申请对接口的使用,申请通过后会获得:AccessId/SecretKey

API网关(服务访问的地址):127.0.0.1:7000

请求path(业务接口的路径):/v1/article/.......

 

将请求内容拼装为String(格式为统一格式)

String stringToSign=
             HTTP-Verb + "\n" +    //请求的方法
             Content-MD5 + "\n"    //参数的MD5
             Content-Type + "\n" +   //请求的参数类型
             Timestamp + "\n" +    //请求的时间戳
             Headers + Url_String    //请求头以及请求路径

然后通过SecretKey对stringToSign进行加密,得到签名串:sign

将AccessId:sign放入请求头,作为鉴权的依据 :  Authorization: gateway:{AccessId}:{Signature}

发送请求

2.2.网关拦截

网关拦截该次请求,获取鉴权信息,得到AccessId依据加密后的签名串sign

从request中获取请求信息(请求的方法,参数类型,时间戳,请求路径等。。),重新组装 stringToSign

将AccessId,sign,stringToSign,url(请求的path),method(请求的方法)作为参数,调用鉴权接口进行校验

2.3.鉴权

通过AccessId,查数据库,获取SecretKey,以及用户信息等

使用获取的SecretKey对stringToSign进行加密,得到签名串,对比原始签名串,是否匹配,匹配则请求合法

其他校验:对用户信息进行校验,用户是否可用、对AccessId使用超期进行判断等

通过url以及method获取API信息(主要是获取其服务名)

返回鉴权结果

2.4.服务分发

对鉴权结果进行判断,合法则进行服务分发,将请求转发到对应服务上

获取响应结果

2.5.封装响应

对响应结果进行处理,统一封装为网关返回数据

 

 

分类:

技术点:

相关文章: