zoukankan      html  css  js  c++  java
  • SpringCloud:搭建基于Gateway的微服务网关(一)

    1.需求

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

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

    2.工作原理

    2.1.请求

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

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

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

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

    String stringToSign=
                 HTTP-Verb + " " +    //请求的方法
                 Content-MD5 + " "    //参数的MD5
                 Content-Type + " " +   //请求的参数类型
                 Timestamp + " " +    //请求的时间戳
                 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.封装响应

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

  • 相关阅读:
    Codeforces Round #674 (Div. 3)C. Increase and Copy
    Calendar Game
    poj3255Roadblocks
    L2-008 最长对称子串
    L2-004 这是二叉搜索树吗?
    D. Boboniu Chats with Du Codeforces Round #664 (Div. 2)
    暑假了,冲冲冲
    逆元和同余
    懒惰的我
    Codeforces Round #594 (Div. 2) C题
  • 原文地址:https://www.cnblogs.com/fdzang/p/11810705.html
Copyright © 2011-2022 走看看