分享免费的编程资源和教程

网站首页 > 技术教程 正文

Kong Gateway 身份验证 gateway登录验证

goqiw 2024-10-02 21:57:34 技术教程 29 ℃ 0 评论

介绍

流向上游服务(api或微服务)的流量通常由各种Kong认证插件的应用程序和配置控制。因为Kong的服务实体代表了你自己的上游服务一对一的映射,最简单的方案就是在你选择的服务上配置认证插件

通用认证

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

  1. 将身份验证插件应用于服务或全局应用(不能应用于消费者)
  2. 创建一个消费者实体
  3. 为使用者提供特定身份验证方法的身份验证凭证
  4. 现在,无论何时请求进来,Kong都会检查所提供的凭证(取决于auth类型),如果不能验证,它要么阻止请求,要么在头中添加消费者和凭证的详细信息并转发请求。

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

消费者

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

对Kong来说,这是一个模糊的概念,因此他们被称为“消费者”,而不是“用户”。

匿名访问

Kong能够配置给定的服务,以允许身份验证和匿名访问。您可以使用此配置以低速率限制授予匿名用户访问权限,并以较高速率限制授予经过身份验证的用户访问权限。要配置这样的服务,您首先应用您选择的身份验证插件,然后创建一个新的消费者来表示匿名用户,然后配置您的身份验证插件来允许匿名访问。下面是一个示例,假设您已经配置了名为example- Service的服务和相应的路由:

  • 创建示例服务和路由

发出下面的cURL请求来创建示例服务,并指向mockbin.org,后者将响应该请求:

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

添加一个路由到服务:

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

url地址http://localhost:8000/auth-sample现在将回送所请求的内容。

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

发出下面的cURL请求,向服务添加插件:

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

一定要注意创建的插件id,你将在步骤5中需要它。

  • 验证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"
 }
  • 创建一个匿名消费者

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

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

您应该会看到类似于下面的响应:

 HTTP/1.1 201 Created
 Content-Type: application/json
 Connection: keep-alive

 {
   "username": "anonymous_users",
   "created_at": 1428555626000,
   "id": "bbdf1c48-19dc-4ab7-cae0-ff4f59d87dc9"
 }

请务必注意消费者id——您将在下一步中需要它。

  • 允许匿名访问

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

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插件允许匿名访问,并将这种访问与我们在上一步中接收到的消费者id相关联。在此步骤中,您需要提供一个有效的且预先存在的消费者id——在配置匿名访问时,当前不会检查消费者id的有效性,而提供一个不存在的消费者id将导致不正确的配置。

  • 检查匿名访问

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

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",
     ...
   },
   ...
 }

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


多重身份验证

Kong可以为一个服务提供多个认证插件,允许不同的客户端使用不同的认证方法来访问一个给定的服务或路由。

在评估多个身份验证凭证时,认证插件的行为可以被设置为做一个逻辑和或者一个逻辑或。属性config.anonymous是配置的关键行为。

  • config.anonymous如果这个属性没有设置(空),那么认证插件将始终执行身份验证,如果没有验证,则返回一个40x的响应。当多个认证插件被调用时将进行逻辑和的运算。
  • config.anonymous设置为一个有效的消费者id,在这种情况下,认证插件只会在未经认证的情况下执行认证。当身份验证失败时,它不会返回一个40倍的响应,而是将匿名使用者设置为使用者。当多个认证插件被调用时,这会导致逻辑或的运算加“匿名访问”。

注意1:要么全部、要么没有一个认证插件配置为匿名访问。如果它们是混合的,其行为是未定义的。

注意2:当使用AND方法时,最后执行的插件将设置传递给上游服务的凭证。使用OR方法,它将是第一个成功验证消费者身份的插件,或者是最后一个设置其配置的匿名消费者的插件。

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

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表