预备知识API网关Oauth2JWTCORS加密http网关产品选型标准Gravitee产品架构Gravitee网关配置Gravitee授权服务器配置API调用的安全验证后续工作目录预备知识:API网关为什么需要接口网关隔离作用作为企业系统边界,隔离外网系统与内网系统。API网关部署在防火墙外面,起到一层挡板作用,内部系统只接受API网关转发过来的请求。网关通过白名单或校验规则,对访问进行了初步的过滤。相比防火墙,这种软件实现的过滤规则,更加动态灵活。解耦作用对于服务提供者来说,他主要的职责是对业务进行抽象,提供可复用的业务功能,他们需要对业务模型进行深入的思考和沉淀,不能轻易为了响应外部的需求而破坏业务模型的稳定性。而业务的快速变化,又要求企业快速提供接口来满足客户端(可以是外部系统或者web前端)需求。这就需要一个中间层,来对服务层的接口进行封装,以及时响应客户端的需求(如报文转换,mock等)。非功能作用网关层除了请求的路由、转发外,还需要负责安全、鉴权、限流、监控,分析等。这些功能的实现方式,往往随着业务的变化不断调整。例如权限控制方面,早期可能只需要简单的用户+密码方式,后续用户量大了后,可能会使用高性能的第三方解决方案(如Oauth2,jwt等方式)接口网关和使用场景接口网关使用场景面向WebApp的网关这类场景,在物理形态上类似前后端分离,此时的WebApp已经不是全功能的WebApp,而是根据场景定制、场景化的App。面向MobileApp的网关这类场景,移动App是后端Service的使用者,此时的APIGW还需要承担一部分MDM(此处是指移动设备管理,不是主数据管理)的职能。面向PartnerOpenAPI的网关这类场景,主要为了满足业务形态对外开放,与企业外部合作伙伴建立生态圈,此时的APIGW需要增加配额、流控、令牌等一系列安全管控功能。面向PartnerExternalAPI的网关这类场景,主要是为了满足企业自身业务的需要,实现对企业自有业务的映射。一个典型的例子就是使用「合作方账号登录」、「使用第三方支付平台支付」等等。此时的APIGW就需要在边界上,为企业内部Service统一调用外部的API做统一的认证、授权、以及访问控制。面向IoTSmartDevice的网关这类场景主要在传统企业,尤其是工业企业,传感器、物理设备从工业控制协议向IP转换,导致物理链路上会存在一部分公网链路。此时的APIGW所需要满足的「内外兼修」的双向数据流,设备一般通过一个「客户侧」的集中网关在和企业的接入网关进行通信。接口网关基本架构点对点方式对于合作方不友好,没有进行内部业务的整合和对外部的隔离,不利于对渠道的统一管理非功能需求的实现不统一服务提供方各自实现了部分的非功能需求,如认证,日志等,并且在实现技术手段上没有规范性,不统一,不标准,不完整,并且造成重复浪费缺乏监控分析,带来系统隐患缺乏调用的分析监控,严重时影响到核心系统正常运行中心化的渠道统一管理对内部业务的封装,对外提供统一接口,从而达到与外部渠道隔离解耦非功能统一实现管理提供安全,缓存,转换,日志,流控,过滤等非功能的统一服务管理API等生命周期,版本标准化API的创建,发布,下线,版本升级,文档变更等,通过变更记录,方便审计API的历史变化消费监控、记录,告警,衡量和分析渠道的成果记录渠道的消费过程,通过各种维度的渠道消费结果的分析主动注册接口网关接口网关的基本功能API生命周期管理功能:覆盖API的定义、测试、发布的整个生命周期管理,便捷的日常管理、版本管理,支持热升级和快速回滚。开发和使用支持功能:提供页面调试工具,自动生成API文档和SDK,大大降低人力成本。安全防护功能:API请求到达网关需要经过严格的身份认证、权限认证,才能到达后端服务。支持算法签名,支持SSL加密。流量控制功能:可控制单位时间内API允许被调用次数。用来保护企业的后端服务,实现业务分级和用户分级。支持对API流控,您可以根据API的重要程度来配置不同流控,从而保障重要业务的稳定运行;请求响应转换功能:可以在API网关定义参数映射规则,网关通过映射规则将后端服务通过映射翻译成任何形式,以满足不同用户的不同需求,从而避免功能重复开发。监控告警功能:提供实时、可视化的API监控,包括:调用量、调用方式、响应时间、错误率,让您能够清楚的了解API的运行状况和用户的行为习惯。支持自定义报警规则,来针对异常情况进行报警,降低故障处理时间。分析功能:提供可订阅的数据分析报表和智能分析。其他:黑白名单,日志,mock等预备知识:Oauth2Oauth2一般应用场景:微信登录微信登录是Oauth2授权方式中的授权码模式Oauth2一般应用场景:API访问安全验证移动报销app,汇联易提供的接口,通过oauth2方式进行授权验证,还有营改增项目,百望提供的接口,也是oauth2方式Api访问控制是Oauth2授权方式中的客户端模式1、Basic认证是为了获得token的访问权限2、clientcredentials,采用了客户端模式Oauth2授权方式说明Oauth2是一种授权开放网络标准,主要参考材料为RFC6749客户端本身并不知道用户是谁,通过授权后的接口访问来获得用户信息密码模式(resourceownerpasswordcredentials)(客户端程序提供登录页面)这种模式是最不推荐的,因为client可能存了用户密码这种模式主要用来做遗留项目升级为oauth2的适配方案当然如果client是自家的应用,也是可以支持refreshtoken授权码模式(authorizationcode)(授权服务器提供登录页面)这种模式算是正宗的oauth2的授权模式,通过服务器后台连接设计了authcode,通过这个code再获取token,腾讯开放平台中的server模式支持refreshtoken简化模式(implicit)(授权服务器提供登录页面)这种模式比授权码模式少了code环节,回调url直接携带token,通过前台浏览器js连接这种模式的使用场景是基于浏览器的应用,腾讯开放平台的client模式这种模式基于安全性考虑,建议把token时效设置短一些不支持refreshtoken客户端模式(clientcredentials)这种模式直接根据client的id和密钥即可获取token,无需用户参与这种模式比较合适消费api的后端服务,比如拉取一组用户信息等不支持refreshtoken,主要是没有必要注:refreshtoken的初衷主要是为了用户体验不想用户重复输入账号密码来换取新token,因而设计了refreshtoken用于换取新token,这种模式由于没有用户参与,而且也不需要用户账号密码,仅仅根据自己的id和密钥就可以换取新token,因而没必要refreshtoken授权码方式授权流程说明Oauth2说明OAuth2协议中,共有四个参与方(角色):resourceowner:资源拥有者即用户resourceserver:资源服务器即存储用户数据的服务器,一般对外都以RESTFulAPI的形式暴露用户数据,client使用accesstoken访问resourceserver申请被保护起来的用户数据client:客户端即第三方应用authorizationserver:授权服务器用来鉴权第三方应用合法性,并对用户登录、是否授权第三方应用获取数据进行响应,并根据用户操作,想第三应用颁发用户token或者告知授权失败详细介绍://://客户端方式授权流程说明认证服务器不提供像用户数据这样的重要资源,仅仅是有限的只读资源或者一些开放的API的授权范围微信开放平台网站登录=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=6dbf58b68461936cec3a82fc6fb3b679c53e2ad0&lang=zh_CN腾讯开放平台网站登录蚂蚁金服支付宝网站登录国内主流第三方授权服务预备知识:JWTJWT一般应用场景(身份认证)参考:://jwt.io/introduction/JWT一般应用场景(信息传递)参考:例如:URL签名场景1:业务系统之间前端调用,在url中影藏关键参数,如账号,密码场景2:发送注册等邮箱验证url,防止他人回去url篡改,并能设置失效时间JWT(JsonWebToken)简介1、特点自包含:完整的用户信息,不需要数据库交互无状态:非常合适用于API服务认证2、组成:Header签名算法和令牌格式PayloadReservedclaims:这些claim是JWT预先定义的,在JWT中并不会强制使用它们,而是推荐使用,常用的有iss(签发者),exp(过期时间戳),sub(面向的用户),aud(接收方),iat(签发时间)。Publicclaims:根据需要定义自己的字段,注意应该避免冲突Privateclaims:这些是自定义的字段,可以用来在双方之间交换信息Signature秘钥签名,公钥验证预备知识:加密加密算法摘要算法(不可逆)主要算法:MD5算法(MessageDigestAlgorithm5),SHA(SecureHashAlgorithm),算法不可逆一般用途:保证数据完整性和不被篡改,如下载的zip文件是否完整,报文传输是否被篡改,验证用户名密码(结合salt)编码与解码主要算法:Base64(为了编写存储方便一般将2进制转换为16进制字符串)一般用途:Basichttp验证,用户名:密码经过base64放入header对称加密主要算法:DES(DataEncryptinStandard),AES算法(AdvancedEncryptinStandard高级加密标准),PBE算法(PasswordBaseEncryption)一般用途:个人文件加密非对称加密(可加密,可签名)主要算法:DH算法,RSA算法一般用途:公钥加密,私钥解密;私钥签名,公钥验签(用于ssl,电子签章,jwt)数字证书:所有者从秘钥库中导出的公钥,CA用自己的私钥对公钥签名,用户拿CA的公钥解出所有者的公钥,CA(CertificateAuthority)是第三方的机构(ssl,电子签章等),VeriSign,GeoTrust和Thawte三大CA权威机构数据签名(只可签名)主要算法:DSA,非对称算法+摘要,通过公钥来解密摘要一般用途:RSA秘钥生成生成秘钥对keytool-genkeypair-aliasmytestkey-keyalgRSA-dnameCN=WebServer,OU=Unit,O=Organization,L=City,S=State,C=US-keypasschangeme-keystoreserver.jks-storepassletmein导出二进