介绍

上游服务(api或微服务)的流量通常由各种Kong的authentication plugins的应用程序和配置控制。由于Kong的服务实体表示您自己的上游服务的一对一映射,所以最简单的场景是在您选择的服务上配置身份验证插件。

通用认证

最常见的场景是需要身份验证,不允许对任何未经身份验证的请求进行访问。要实现这一点,可以使用任何身份验证插件。这些插件的一般方案/流程如下:

  1. 将身份验证插件应用于服务,或全局(您不能将其应用于使用者)
  2. 创建consumer实体
  3. 为consumer提供特定身份验证方法的身份验证凭据
  4. 现在,每当请求进入Kong时,它将检查提供的凭证(取决于身份验证类型),如果无法验证,它将阻塞请求,或者在header中添加使用者和凭证详细信息并转发请求

上面的通用流并不总是适用的,例如在使用LDAP之类的外部身份验证时,就没有要标识的使用者,并且只在转发的头中添加凭证。

在每个插件的文档plugin’s documentation中都可以找到特定于身份验证方法的元素和示例。

消费者

对于consumer最简单的方法是将他们一对一地映射到用户。然而,这对KOng来说并不重要。对于使用者来说,核心原则是可以将插件附加到它们上,从而定制请求行为。你可能有移动应用,为每个应用定义一个消费者,或它的版本。或者每个平台都有一个消费者,例如android消费者、iOS消费者等等。

对于Kong来说,这是一个不透明的概念,因此他们被称为“consumers”,而不是“users”。

匿名访问

Kong能够配置给定的服务,以允许身份验证和匿名访问。您可以使用此配置将访问权限授予具有较低速率限制的匿名用户,并将访问权限授予具有较高速率限制的经过身份验证的用户。

要配置这样的服务,首先应用所选的身份验证插件,然后创建一个新的使用者来表示匿名用户,然后配置身份验证插件以允许匿名访问。下面是一个示例,它假设您已经配置了一个名为example- Service的服务和相应的路由:

1、创建示例服务和路由

发出以下cURL请求,创建example-service指向mockbin.org,该服务将响应该请求:

 $ curl -i -X POST \
--url http://localhost:8001/services/ \
--data 'name=example-service' \
--data 'url=http://mockbin.org/request'

Add a route to the Service:

 $ curl -i -X POST \
--url http://localhost:8001/services/example-service/routes \
--data 'paths[]=/auth-sample'

The url http://localhost:8000/auth-sample will now echo whatever is being requested.

2、为您的服务配置key-auth插件

发出以下cURL请求,将插件添加到服务中:

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

请务必注意创建的插件id——在步骤5中需要它。

3、验证key-auth插件配置正确

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

 $ curl -i -X GET \
--url http://localhost:8000/auth-sample

由于您没有指定所需的apikey头文件或参数,并且您还没有启用匿名访问,因此响应应该是403禁止的:

 HTTP/1.1 403 Forbidden
... {
"message": "No API key found in headers or querystring"
}

4、创建匿名consumer

Kong代理的每个请求都必须与一个consumer相关联。现在,通过发出以下请求,您将创建一个名为anonymous_users的使用者(Kong将在代理匿名访问时使用该使用者):

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

You should see a response similar to the one below:

 HTTP/1.1 201 Created
Content-Type: application/json
Connection: keep-alive {
"username": "anonymous_users",
"created_at": 1428555626000,
"id": "bbdf1c48-19dc-4ab7-cae0-ff4f59d87dc9"
}

请务必注意consumer id——您将在下一个步骤中需要它。

5、允许匿名访问

您现在将重新配置key-auth插件,通过发出以下请求来允许匿名访问(将下面的示例uuid替换为步骤2和步骤4中的id值):

 $ curl -i -X PATCH \
--url http://localhost:8001/plugins/<your-plugin-id> \
--data "config.anonymous=<your-consumer-id>"

配置config.anonymous=<your-consumer-id> 参数指示此服务上的key-auth插件允许匿名访问,并将这种访问与我们在上一步中接收到的consumer id关联起来。在这一步中,您需要提供一个有效且预先存在的consumer id——在配置匿名访问时,当前不会检查consumer id的有效性,并且提供一个不存在的consumer id将导致不正确的配置。

6、匿名访问

通过发出以下请求,确认您的服务现在允许匿名访问:

 $ curl -i -X GET \
--url http://localhost:8000/auth-sample

这是您在步骤3中发出的相同请求,但是这次请求应该成功,因为您在步骤5中启用了匿名访问。

响应(即Mockbin接收到的请求)应该包含以下元素:

 {
...
"headers": {
...
"x-consumer-id": "713c592c-38b8-4f5b-976f-1bd2b8069494",
"x-consumer-username": "anonymous_users",
"x-anonymous-consumer": "true",
...
},
...
}

它显示请求成功,但是是匿名的。

Multiple身份验证

Kong支持针对给定服务的多个身份验证插件,允许不同的客户机使用不同的身份验证方法访问给定的服务或路由。

可以将身份验证插件的行为设置为逻辑与、逻辑或在评估多个身份验证凭据时执行。行为的关键是配置config.anonymous属性。

  • config.anonymous not set

如果未设置此属性(空),则身份验证插件将始终执行身份验证,如果未验证,则返回40x响应。这将在调用多个auth插件时产生一个逻辑插件。

  • config.anonymous set to a valid consumer id

在这种情况下,身份验证插件只会在尚未验证的情况下执行身份验证。当身份验证失败时,它将不返回40x响应,而是将匿名使用者设置为使用者。当多个身份验证插件被调用时,这将导致一个逻辑或+“anonymous access”。

注1:必须为所有auth plugin或全部都不配置anonymous access。如果它们是混合的,则行为是未定义的。

注2:在使用AND方法时,最后执行的插件将设置传递给上游服务的凭证。使用OR方法,最后传递上游服务凭证将是将是第一个成功验证consumer的插件,或者最后一个plugin将是传递上游服务凭证,如果其已配置的anonymous consumer.。

注3:当以一种AND的方式同时使用OAuth2插件时,用于请求令牌的OAuth2端点等也需要通过其他配置的auth插件进行身份验证。

如果在给定的服务上以某种方式启用多个身份验证插件,并且希望禁止匿名访问,那么应该在匿名使用者上配置请求终止插件。不这样做将允许未经授权的请求。

 

Kong(v1.0.2)认证的更多相关文章

  1. Kong(V1.0.2) Securing the Admin API

    Introduction Kong的Admin API为Services, Routes, Plugins, Consumers, and Credentials的管理和配置提供了一个RESTful接 ...

  2. Kong(V1.0.2)Network & Firewall

    介绍 在本节中,您将找到关于Kong推荐的网络和防火墙设置的摘要.PortsKong使用多个连接用于不同的目的. 代理 管理api Proxy 代理端口是Kong接收传入流量的地方.有两个端口具有以下 ...

  3. Kong安装教程(v1.0.2)

    使用的软件 Unbuntu 虚拟机(有自己的服务器更好) PostgreSQL kong kong-dashboard docker spring boot 安装 PostgreSQL kong 需要 ...

  4. Kong(v1.0.2)代理参考

    介绍 在本文中,我们将通过详细解释Kong的路由功能和内部工作原理来介绍它的代理功能. Kong公开了几个接口,可以通过两个配置属性进行调整: proxy_listen,它定义了一个地址/端口列表,K ...

  5. hasura graphql-engine v1.0.0-alpha26 版本新功能

    hasura 发布了graphql-engine v1.0.0-alpha26 版本,有一些破坏的变动,以及方便的新特性 破坏性变动 order_by 从 order_by: id_asc 为 ord ...

  6. 安卓开发开发规范手册V1.0

    安卓开发开发规范手册V1.0 之前发布过一份Web安全开发规范手册V1.0,看到收藏文章的读者挺多,发现整理这些文档还挺有意义. 最近周末抽了些时间把之前收集关于安卓安全开发的资料也整理了一下,整理出 ...

  7. 【Beta】“北航社团帮”测试报告——小程序v2.0与网页端v1.0

    目录 测试计划.过程和结果 后端测试--单元测试与覆盖率 后端测试--压力测试 展示部分数据 平均数据 前端测试--小程序v2.0 授权登录与权限检查 新功能的测试 兼容性测试 性能测试 前端测试-- ...

  8. 【Beta】“北航社团帮”发布声明——小程序v2.0与网页端v1.0

    目录 Beta版本新功能 小程序v2.0新功能 新功能列表 功能详情图 新功能动图展示 网页端v1.0功能 登录方式 社团信息的修改 新闻的录入和修改 活动的录入和修改 这一版修复的缺陷 Beta版本 ...

  9. MySQL与MariaDB核心特性比较详细版v1.0(覆盖mysql 8.0/mariadb 10.3,包括优化、功能及维护)

    注:本文严禁任何形式的转载,原文使用word编写,为了大家阅读方便,提供pdf版下载. MySQL与MariaDB主要特性比较详细版v1.0(不含HA).pdf 链接:https://pan.baid ...

  10. 【Azure Developer】Azure Graph SDK获取用户列表的问题: SDK中GraphServiceClient如何指向中国区的Endpoint:https://microsoftgraph.chinacloudapi.cn/v1.0

    问题描述 想通过Java SDK的方式来获取Azure 门户中所列举的用户.一直报错无法正常调用接口,错误信息与AAD登录认证相关,提示tenant not found. 想要实现的目的,通过代码方式 ...

随机推荐

  1. UITextField属性及方法说明

    /初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(, , , )] //设置 ...

  2. Vue组件中的问题

    错误信息: 提示信息含义:组件模板中只能包含一个根元素 解决办法:在模板元素内部增加块级元素div将这些元素标签包裹起来,如图所示

  3. 如何删除node_modules

    1.$ npm install -g rimraf   执行此命令 2.$ rimraf node_modules

  4. 常用css

    边框 css   基本设置:border:1px solid #d2d2d2;    风格有:solid=>实线 double=>双实线 dotted=>点状 dashed=> ...

  5. python从零开始 -- 第0篇之Hello World!

    为什么选择python以及版本选择 学习资料 学习方法和路径 1. 为什么选择python以及版本选择: Python  好玩,强大,更多关于关于为什么选择Python,在  编程小白的第一本 Pyt ...

  6. Vue.js devtool插件安装后无法使用的解决办法【最简单有效的解决方法】

    在开发vue相关的项目时,使用vue devtools工具是一件极其有趣的事,你所有的操作都马上给你实时反馈. 然而有时候安装好的工具,在chrome中不显示. 在网上找过多次,一直没有找到有效解决方 ...

  7. 我的代码-random forest

    # coding: utf-8 # In[1]: import pandas as pdimport numpy as npfrom sklearn import treefrom sklearn.s ...

  8. Java成神路上之设计模式系列教程之一

    Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在 ...

  9. Ubuntu网络不通解决办法

    如下问题: 尝试和Host主机互ping也不通, Ubuntu: vmware 桥接模式 IP:192.168.1.202/24 gateway:192.168.1.1 Host主机:网络正常 IP: ...

  10. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec

    人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...