Kong(v1.0.2)認證


介紹

上游服務(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插件進行身份驗證。

如果在給定的服務上以某種方式啟用多個身份驗證插件,並且希望禁止匿名訪問,那么應該在匿名使用者上配置請求終止插件。不這樣做將允許未經授權的請求。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM