[前言]

下面我们将配置key-auth插件以向服务添加身份验证。

key-auth为Service设置key,只有带有正确的key才能访问Kong API

  • 添加此插件之前, 对服务的所有请求都将在上游代理。
  • 添加和配置此插件后,只有具有正确密钥的请求才会被代理,其他未经认证的请求将被Kong拒绝,从而保护您的上游服务免遭未经授权的使用。

1. 配置密钥验证插件

要为您在Kong中配置的service配置key-auth插件,请发出以下CURL请求:

$ curl -i -X POST \
--url http://localhost:8001/services/example-service/plugins/ \
--data 'name=key-auth'

注意:此插件还接受一个config.key_names参数,默认为['apikey']。它是应该在请求期间包含apikey的标头和参数名称(均受支持)的列表。

2. 确认插件配置正确

发出以下cURL请求,以验证是否 在服务上正确配置了key-auth插件:

$ curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host: example.com'

由于您未指定所需的apikey标头或参数,因此响应应为401 Unauthorized:

HTTP/1.1 401 Unauthorized
... {
"message": "No API key found in request"
}

由上我们已经成功配置了key-auth 插件,我们还需要将消费者cunsumer添加到服务中,以便继续通过Kong代理请求。

如果对Cunsumer的概念不清楚,请参考官网 consumer-object

3. 创建cunsumer

让我们创建一个Jason通过发出以下请求命名的用户:

$ curl -i -X POST \
--url http://localhost:8001/consumers/ \
--data "username=Jason" \
--data "custom_id=Jason"

注意custom_id在创建使用者以将使用者与现有用户数据库相关联时,Kong还接受参数。

4. 给cunsumer提供关键凭证

现在,我们可以Jason通过发出以下请求为最近创建的使用者创建密钥:

$ curl -i -X POST \
--url http://localhost:8001/consumers/Jason/key-auth/ \
--data 'key=123456'

5. 验证

现在,我们可以发出以下请求来验证我们的Jason消费者凭证是否有效:

$ curl -i -X GET \
--url http://localhost:8000 \
--header "Host: example.com" \
--header "apikey: 123456"

浏览器

  • 不发送consumer认证密钥,401 Unauthorized

  • 发送consumer认证密钥

6. 小结

  • 插件不仅能作用于 service,也可以作用于route
  • 插件默认作用于all comsumers,并根据需求确定是否设置访问凭证

[sleepy↓]

[Kong] key-auth实现对API请求的密钥认证的更多相关文章

  1. 使用JWT来实现对API的授权访问

    目录 什么是JWT JWT的结构 Header Payload Signature 解码后的JWT JWT是怎样工作的 在JAVA里使用JWT 引入依赖 JWT Service 生成JWT 解码JWT ...

  2. jmeter通过BeanShell 脚本,实现对http请求参数的加密

    jmeter一直是一款很好的接口和性能测试工具,它是开源的,不需要为此支付任何费用,而且可以下载源码,可以在修改源代码并在此基础上拓展自己的功能或插件,它可以跟ant和jenkins结合起来搭建自己的 ...

  3. laravel5.7 前后端分离开发 实现基于API请求的token认证

    最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...

  4. js 实现对ajax请求面向对象的封装

             AJAX 是一种用于创建高速动态网页的技术.通过在后台与server进行少量数据交换.AJAX 能够使网页实现异步更新.这意味着能够在不又一次载入整个网页的情况下,对网页的某部分进行 ...

  5. 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    一个简单的QQ隐藏图生成算法   隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...

  6. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  7. 利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理

    在我们开发Web API应用的时候,我们可以借鉴ABP框架的过滤器Filter和特性Attribute的应用,实现对Web API返回结果的封装和统一异常处理,本篇随笔介绍利用AuthorizeAtt ...

  8. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

  9. Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密

    Java代码加密与反编译(二):用加密算法DES修改classLoader实现对.class文件加密 二.利用加密算法DES实现java代码加密 传统的C/C++自动带有保护机制,但java不同,只要 ...

随机推荐

  1. Jupyter Notebook出现kernel error情况

    今天重新装了anaconda,在运行时发现真快,可是在运行selenium的代码时候,发现自己按照以前写得帖子得步骤做,同样还是出现了错误,心里不免大吃一惊,难道我的做法是错的?等到发现有个  ker ...

  2. ONNX MLIR方法

    ONNX MLIR方法 MLIR中的开放式神经网络交换实现. Prerequisites gcc >= 6.4 libprotoc >= 3.11.0 cmake >= 3.15.4 ...

  3. Ryzen 4000'Vermeer' CPU和Radeon RX'Big Navi'图形卡

    Ryzen 4000'Vermeer' CPU和Radeon RX'Big Navi'图形卡 来自中国媒体的多篇报道表明,AMD都准备在2020年第四季度初推出其下一代Ryzen 4000'Zen 3 ...

  4. 编译原理-DFA的化简(最小化)

    对于给定的DFA    M,寻找一个状态数比M小的DFA    M'使得L(M)=L(M') 1.状态的等价性: 假设s和t为M的两个状态 ①若分别从状态s和状态t出发都能读出某个字α而停止于终态,则 ...

  5. mybatis在动态 SQL 中使用了参数作为变量,必须要用 @Param 注解

    如果在动态 SQL 中使用了参数作为变量,那么就要用 @Param 注解,即使你只有一个参数.如果我们在动态 SQL 中用到了 参数作为判断条件,那么也是一定要加 @Param 注解的,例如如下方法: ...

  6. 使用fiddler工具模拟弱网环境

    1.使用CTRL+R快捷键调出设置窗口 2.CTRL+F搜索"if (m_SimulateModem)",如下图   3.设置 // 这里修改每KB上传时候的延迟速度,以ms为单位 ...

  7. [Azure DevOps] 使用 Inno Setup 制作桌面软件安装包

    1. 桌面应用程序的 CI/CD 桌面应用程序的 CI/CD 过程和网站有一些不同,毕竟桌面应用程序的"部署"只是将安装包分发到目标位置,连应用商店都不用上,根据公司的管理流程可以 ...

  8. 从架构师角度谈谈mybatis-plus可能存在的问题

    存在这么一个情况:对于缺营养的人来说,医生更倾向于建议他选择纯牛奶,而不是有机奶(因其有添加剂).然而,大部分人却更加倾向于选择有机奶, 因其口感不错,因此,对于选择纯牛奶还是有机奶,这是个博弈问题. ...

  9. OO unit1 summary

    Unit 1 summary 一.前言 三周左右的学习,OO第一单元顺利结束了,个人认为有必要写个blog来反思总结一下自己第一单元的学习情况,以便更好地进行后面的学习. 之前从来没有写blog的习惯 ...

  10. 解决两个相邻的span,或者input和button中间有间隙,在css中还看不到

    <span id="time"></span><span id="second"></span> <inp ...