apigateway-kong(六)認證

來源:互聯網
上載者:User

標籤:這一   users   type   例子   sage   war   col   android   匿名訪問   

  到上遊服務(API或微服務)的流量通常由各種Kong認證外掛程式的應用程式和配置來控制。由於Kong的服務實體(Service Entity)代表自己的上遊服務的1對1映射,最簡單的方案是在選擇的服務上配置認證外掛程式。

通用認證

  最常見的情況是需要身分識別驗證,並且不允許訪問任何未經身分識別驗證的請求。要實現這一點,可以使用任何身分識別驗證外掛程式。這些外掛程式的通用方案/流程如下所示:

1.向一個API或全域添加AUTH外掛程式(無法將其應用於Consumer)
2.建立一個Consumer實體
3.為Consumer提供特定驗證外掛程式方案的身分識別驗證憑據
4.現在,每當有請求進入時,Kong將檢查提供的憑證(取決於auth類型),如果請求無法驗證,它將阻止該請求,或者在header中添加使用者和憑證詳細資料並轉寄請求

上面的通用流程並不總是適用的,例如,當使用外部認證(如LDAP)時,則不會識別Consumer,只有憑證將被添加到轉寄的標題(forwarded headers)中。

在每個外掛程式的文檔中都可以找到驗證方法的特定元素和樣本

Consumers

  最簡單的理解和配置consumer的方式是將其於使用者進行一一映射,然而,對於這個並不重要。consumer的核心原則是你可以為其添加外掛程式,從而自訂請求行為。所以你可能有移動APP,並為每個應用程式或其版本定義一個消費者。或者每個平台都有一個消費者,例如Android消費者,iOS消費者等。

這對Kong來說是一個不透明的概念,因此他們被稱為“消費者”而不是“使用者”。

匿名訪問

  在Kong 0.10.x版本之前,你可以將指定的API配置為僅允許經過身分識別驗證的訪問(通過外掛程式來實現)或只允許匿名訪問。也就是說,一個指定的API,不允許對於某些consumer實行身分識別驗證,而對於另外的consumer實行匿名訪問。
  在0.10.x版本以後,這些限制取消了。Kong可以配置給定的服務(Service)以允許通過身分識別驗證和匿名訪問,你可以使用此配置為低速率限制的匿名使用者授予存取權限,並向具有較高速率限制的已認證使用者授予存取權限。

要這樣佈建服務,您首先應用所選的身分識別驗證外掛程式,然後建立一個新的Consumer來表示匿名使用者,然後配置您的身分識別驗證外掛程式以允許匿名訪問。
這裡是一個例子,假設你已經配置了一個名為example-service的Service和相應的Route:

1. 建立樣本Service和Route

發出以下CURL請求來建立指向mockbin.org的example-service,它將響應請求:

$ 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 現在會回應正在請求的內容

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

由於未在header或parameter指定所需的apikey,並且尚未啟用匿名訪問,所以響應應為403 Forbidden:

HTTP/1.1 403 Forbidden...{  "message": "No API key found in headers or querystring"}
4.建立匿名consumer

  由Kong代理的每個請求都必須與消費者關聯。現在您將建立一個名為anonymous_users的消費者(Kong將在代理匿名訪問時使用),方法是發出以下請求:

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

你將會看到類似下面的Response:

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

記住這個Consumer id, 後面的步驟將會用到。

5.啟用匿名訪問

現在將重新設定key-auth外掛程式以允許通過發出以下請求來進行匿名訪問(將步驟2和4中的uuid值替換為以下樣本uuids)

$ 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中啟用了匿名訪問。

Response 大致包含這些欄位:

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

請求返回成功,但是是匿名訪問。

多重驗證

  Kong支援給定服務的多個身分識別驗證外掛程式,允許不同的用戶端使用不同的驗證方法訪問給定的服務或路由。
在評估多個身分識別驗證憑證時,可以將auth外掛程式的行為設定為執行邏輯AND或邏輯OR。該行為的關鍵是配置config.anonymous屬性。

  • config.anonymous預設未設定,如果此屬性未設定(空),則驗證外掛程式將始終執行驗證,如果未驗證,則返回40x響應。當多個auth外掛程式被調用時,這會導致邏輯AND。
  • config.anonymous 設定為有效consumer ID。在這種情況下,auth外掛程式只有在尚未認證的情況下才會執行身分識別驗證。當身分識別驗證失敗時,它不會返回40x響應,而是將匿名consumer設定為consumer。當調用多個驗證外掛程式時,會使用OR+匿名。

 

note1:所有的或任何一個驗證外掛程式都可配置為可使匿名訪問的。但是,如果要混合使用驗證外掛程式,則對於匿名訪問的配置就需要進行甄選,否則會出現混亂。

note2:如果使用AND邏輯,則最後一個執行的驗證外掛程式將是把驗證資訊傳遞給上遊服務的那個。當使用OR邏輯時,傳遞給上遊服務驗證資訊的那個外掛程式,將會是第一個成功驗證consumer的那個外掛程式,或者是最後一個配置了匿名存取權限的那個外掛程式。

note3:當以AND方式使用OAuth2外掛程式時,用於請求token等的OAuth2端點也需要其他配置的auth外掛程式進行身分識別驗證。

 

注意:

當在給定服務上以OR方式啟用多個身分識別驗證外掛程式並且希望匿名訪問被禁止時,則應該在匿名消費者上配置request-termination外掛程式,不然會允許未經授權的請求。

 

apigateway-kong(六)認證

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.