api网关的安全(api网关的安全防护 厂家)

大雄 267 2022-12-23


本文目录一览:

开源API网关系统(Kong教程)入门到精通

1、Kong的简介和安装

2、使用Docker安装Kong

3、开源API网关:KONG入门培训

1、配置详解

2、代理详解

3、身份验证详解

4、负载均衡详解

5、健康检查和断路器详解

6、集群详解

7、网络与防火墙详解

8、共有Lua API详解

9、管理API安全保护详解

一、身份验证插件

         1、Basic验证

         2、Key验证

        3、OAuth2.0验证

二、权限安全插件

         1、ACL鉴权

         2、动态SSL

         3、IP限制(黑白名单)

         4、爬虫控制

三、流量控制插件

        1、请求大小限制

         2、请求速率限制

        3、请求终止

四、Serverless插件

         1、Serverless功能

五、分析与监控插件

         1、Zipkin

六、数据转换插件

就是请求,和返回的时候加减点数据。

七、日志插件

日志插件发送目标包括:TCP、UDP、HTTP、FILE、STATSD、SYSLOG 等,比较简单,自己找资料看看

1、玩转SERVICE服务

2、玩转ROUTE路由

3、玩转API对象 (不推荐)

4、玩转CONSUMER消费者

1、Kong整合Consul     附:  Consul快速入门

2、Kong整合Spring Security实现OAuth2.0验证

3、实现Kong的Java管理API

为什么需要api网关

API网关跨一个或多个内部API提供单个统一的API入口点。 通常还包括限制访问速率限制和有关安全性等特点。 诸如Tyk.io的API管理层增加了额外的功能,例如分析,货币化和生命周期管理。

基于微服务的架构可以具有10到100个或更多个服务。 API网关可以为外部消费者提供统一的入口点,而与内部微服务的数量和组成无关。

API网关对于微服务的好处:

1、防止内部关注暴露给外部客户端

API网关将外部公共API与内部微服务API分开,允许添加微服务和更改边界。 其结果是能够在不对外部绑定客户端产生负面影响的情况下重构和适当大小的微服务。 它还通过为您的所有微服务提供单一入口点,对客户端隐藏了服务发现和版本控制详细信息。

2、为您的微服务添加额外的安全层

API网关通过提供一个额外的保护层来防止恶意攻击,例如SQL注入,XML解析器漏洞和拒绝服务(DoS)攻击。

3、支持混合通信协议

虽然面向外部的API通常提供基于HTTP或REST的API,但是内部微服务可以从使用不同的通信协议中受益。 协议可能包括的Protobuf或AMQP ,或者用SOAP,JSON-RPC或XML-RPC系统集成。 API网关可以在这些不同的协议之上提供外部的,统一的基于REST的API,允许团队选择最适合内部架构的API。

4、降低微服务复杂性

如果微服务具有共同的关注点,例如使用API令牌的授权,访问控制实施和速率限制。 每个这些关注可以通过要求每个服务都实现它们,但这为微服务的开发增加更多的时间成本。 API网关将从您的代码中删除这些问题,允许您的微服务关注手头的任务。

5、微服务模拟和虚拟化

通过将微服务API与外部API分离,您可以模拟或虚拟化服务,以验证设计要求或协助集成测试。

API网关的服务对象

API网关可以为Web端、APP提供API访问,也可以给物联网设备提供API接口。另外致力于开发生态的企业还会为一些合作伙伴提供API网关,供其调用通用的微服务。对于可以提供数据或算法服务的企业,可以在云市场的API网关注册自己的API,从而对外提供服务。

阿里API网关使用总结

API网关  API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简单的操作,即可快速、低成本、低风险地开放数据或服务。

利用API网关你可以提高自己公司API安全性,也可以上架到API云市场,供用户购买和使用。

这个没什么可说的,主要是你要想办法尽可能安全地存储你的AppKey和AppSecrect。

所属分组是API的基本属性,所以需要先创建分组,再在分组下创建API。每个账号默认最多可创建100个分组,如需更多分组需要提交工单。分组有所属区域(Region)的概念,比如华东上海区,选择之后就不能修改了。创建完分组之后,系统会给该分组分配一个二级域名,供测试使用,不过,每个二级域名每天最多可访问1000次。

如果你的API支持HTTPS协议,还需要为该独立域名上传 SSL 证书。我们需要把我们的域名解析到该分组上,之后才能绑定到该分组上。绑定的域名需要现在阿里云系统备案。绑定域名之后,该分组下的API就可以通过该域名来访问了,不再需要调用系统分配的二级域名了。

在API分组的环境管理中,你可以自定义环境变量,同一个变量可以再在线上、预发和测试三个环境下对应不同的值,这样在API的定义中就可以使用这里定义好的环境变量了。可以在Path、入参默认值和后端服务服务地址中加入环境变量,在API的定义中使用环境变量需要以 #变量名# 的方式使用。 如果要修改已发布的API用到的环境变量,先把老的环境变量给删掉,再重新定义一个新的同名环境变量赋上新值之后再把全部对应的API重新发布一遍,这个是异步生效的,一般发布后1分钟内生效。

这里的内容还是蛮多的,包括基本配置,前端和后端地址,请求参数配置等,详细文档可以看阿里API的官方文档,这里说几点重要的:

创建好API之后,就可以对应用进行授权了,点击API的“授权”就可以在指定环境下授权某个APP可以访问该API了,如果你在调用API的过程中控制台打印了x-ca-message中包含了Unauthorized错误,你应该想到你的API还未对该APP进行授权访问。

API编辑完成之后就可以发布到指定环境上去了,发布之后就立马生效了。可以多次编辑然后发布到不同的环境下,如果你编辑完了忘记发布到指定环境下了,是不会生效的。在分组API列表下,直接点击API名字进入的是当前API最后一次编辑保存的状态,不一定跟发布的状态一直哦。点击API右边的线上、预发或测试后面的"运行中"可以看到在该环境下最后一次编辑发布后的状态哦。

网关会在请求的时候加上日期、时间戳、nonce、userAgent、Host、AppKey、version等参数值,如果是POST请求的话,需要对参数值进行urlEncode。如果有body值的话,需要对body值,将body中的内容MD5算法加密后再采用BASE64方法Encode成字符串,放入HTTP头中。最后再通过将httpMethod、headers、path、queryParam、formParam经过一系列的运算,合成一个字符串用hmacSha256算法双向加密进行签名。

在我们分组上绑定好了域名之后,我们不管是预发还是线上环境都可以通过这同一个域名进行访问,那网关是怎么帮我们区分环境的呢?这个时候就用到上面的环境变量管理了,我们通过在环境变量中定义一个变量在不同环境下不同的值达到区分环境的效果。在网络请求的时候,我们可以在头部指定 X-Ca-Stage 参数值来让网关帮我们转发到对应环境的后端服务上,对应的值分别是:线上(RELEASE)默认、预发(PRE)和测试(TEST)。

这里重点说一下参数位置下可选的Body选项,这个地方坑了我们蛮久。我们知道在我们客户端发起POST请求时,我们会在头部指定“Content-Type”为“application/x-www-form-urlencoded”,然后把请求的参数组装成"key1=value1key2=value2"的字符串,然后在编码成二进制,放在请求的Body里,以Form表单的形式提交的。所以呢,我们在定义API的参数时,应该把参数位置选择为Body选项。但是我们在很长一段时间里,创建API时或编辑API时,参数位置处下拉一直没有Body选项,我们就把参数定义成了Query类型的了。在使用时也没有啥问题,但是一旦当我们的参数值非常长时,比如一个json字符串,这个是就报错了“414 Request-URI Too Large”,这个时候呢,网关就不会再帮我们把请求转发到服务端了。排查了很久终于找到了罪魁祸首在这里等着呢,通过把参数位置改成Body就可以了。这个可能是阿里API网关前端页面上的一个bug,有时候根本选不到Body选项,这个时候你可以先把“请求Body(非Form表单数据,比如JSON字符串、文件二进制数据等)”选项给勾选上,然后再取消勾选,再下拉展开“参数位置”就可以看到Body选项了。(该文发布时是如此,我已经将该问题反馈给阿里API网关,可能后面会修复该bug。)

另外一个问题是如果你的参数值中包含了emoji表情,需要对参数值进行urlEncode,服务端在收到请求时需要对参数值进行urlDecode。否则用的过程中会出现各种奇怪的问题。问了阿里网关的服务人员,他们的解释是,如果不进行urlEncode,参数在传到网关时可能会丢失。可以对所有Post请求的参数值统一urlEncode,服务端对收到的参数值统一进行urlDecode。

在使用网关时,timestamp和nonce这两个header参数值是可选的,如果加上这两个值,网关层会对请求进行校验,防止重放攻击。不过有个问题:在当前时间的前后15分钟的时间戳都是可以的,一旦超过15分钟就会请求失败,所以,如果用户修改了客户端的系统时间的话,API就会调不通了。这个校验有点严格,如果不知道这一点的话,用户反馈客户端不能用,而你这里测试又没有任何问题,那就泪奔了,哈哈。当然这个是可选的校验,如果不传这两个值的话,就不会校验,这个时候防重放攻击的工作就需要我们自己的服务端做了。

目前网关不支持multipart形式的上传,所以一般我们的上传API不太适合录入网关,阿里的说法是现在大家的做法普遍是先将文件上传到文件服务器,然后通过调用接口把文件地址等信息报错到服务器的方式,所以,目测以后也不大可能支持定义multipart形式的上传API。

每个 API 分组的默认流控上限是500QPS,如果你要调大QPS,需要提交工单并支付相应费用。另外网关有个“流量控制策略”的功能,它是针对API的,也就是说定好策略之后,选中对哪些API生效,这些API就会单独的受这个流量控制策略的控制。但是,需要注意的是,如果你要调大流量控制策略,也必须先调大API所在分组的QPS才会生效,否则流量控制策略可以创建但不会实际生效。

虽然我们可以在分组的环境管理中添加不同的环境变量来实现同一个API分组下可以定义不同服务域名的API,这样我们客户端在发起请求的时候,域名只需要配一个就可以了,非常方便。但是,一旦网关这一层瘫痪(尽管是小概率事件,但不排除),这个时候我们就心有余而力不足了,只能等网关尽快恢复了。如果我们一个分组对应一个我们真正的服务域名的话,一旦网关出问题,我们可以快速把该分组绑定的域名指向我们真正的该分组的服务上。




版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序api接口怎么对接(小程序对接API)
下一篇:第三方api接口(怎么调用第三方api)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~