全部產品
Search
文件中心

Microservices Engine:basic-auth外掛程式

更新時間:Aug 10, 2024

basic-auth外掛程式實現了基於HTTP Basic Auth標準進行認證鑒權的功能。本文介紹如何配置basic-auth外掛程式。

外掛程式類型

認證鑒權。

配置欄位

認證配置

名稱

資料類型

填寫要求

預設值

描述

consumers

array of object

必填。

-

佈建服務的調用者,用於對請求進行認證。

global_auth

array of string

選填(**僅執行個體層級配置**)

-

只能在執行個體層級配置,若配置為true,則全域生效認證機制; 若配置為false,則只對做了配置的網域名稱和路由生效認證機制,若不配置則僅當沒有網域名稱和路由配置時全域生效(相容老使用者使用習慣)。

子項consumers中每一項的配置欄位說明如下。

名稱

資料類型

填寫要求

預設值

描述

credential

string

必填。

-

配置該consumer的訪問憑證。

name

string

必填。

-

配置該consumer的名稱。

鑒權配置(非必需)

名稱

資料類型

填寫要求

預設值

描述

allow

array of string

選填(**非執行個體層級配置**)。

-

只能在路由或網域名稱等細粒度規則上配置,對於符合匹配條件的請求,配置允許訪問的 consumer,從而實現細粒度的許可權控制。

重要
  • 在一個規則裡,鑒權配置和認證配置不可同時存在。

  • 對於通過認證鑒權的請求,請求的Header會被添加一個X-Mse-Consumer欄位,用以標識調用者的名稱。

配置樣本

全域配置認證和路由粒度進行鑒權

以下配置將對網關特定路由或網域名稱開啟Basic Auth認證和鑒權。

說明
  • 憑證資訊中的使用者名稱和密碼之間使用":"分隔。

  • credential欄位不能重複。

在執行個體層級做如下外掛程式配置:

global_auth: false
consumers:
- credential: 'admin:123456'
  name: consumer1
- credential: 'guest:abc'
  name: consumer2

route-aroute-b兩個路由做如下外掛程式配置:

allow:
- consumer1

*.example.comtest.com兩個網域名稱做如下外掛程式配置:

allow:
- consumer2
說明
  • 此例指定的route-aroute-b即在建立網關路由時填寫的路由名稱,當匹配到這兩個路由時,將允許nameconsumer1的調用者訪問,其他調用者不允許訪問。

  • 此例指定的*.example.comtest.com用於匹配請求的網域名稱,當發現網域名稱匹配時,將允許nameconsumer2的調用者訪問,其他調用者不被允許訪問。

根據該配置,下列請求可以允許訪問。

請求指定使用者名稱密碼。

# 假設以下請求將會匹配到route-a路由
# 使用 curl 的 -u 參數指定
curl -u admin:123456  http://xxx.hello.com/test
# 或者直接指定 Authorization 要求標頭,使用者名稱密碼使用 base64 編碼
curl -H 'Authorization: Basic YWRtaW46MTIzNDU2'  http://xxx.hello.com/test

認證鑒權通過後,請求的Header中會被添加一個X-Mse-Consumer欄位,在此例中其值為consumer1,用以標識調用方的名稱。

下列請求將拒絕訪問。

  • 請求未提供使用者名稱密碼,返回401。

    curl  http://xxx.hello.com/test
  • 請求提供的使用者名稱密碼錯誤,返回401。

    curl -u admin:abc  http://xxx.hello.com/test
  • 根據請求的使用者名稱和密碼匹配到的調用者無存取權限,返回403。

    # consumer2不在route-a的allow列表裡
    curl -u guest:abc  http://xxx.hello.com/test

網關執行個體層級開啟

以下配置將對網關執行個體層級開啟 Basic Auth 認證,所有請求均需要經過認證後才能訪問。

global_auth: true
consumers:
- credential: 'admin:123456'
  name: consumer1
- credential: 'guest:abc'
  name: consumer2

相關錯誤碼

HTTP狀態代碼

出錯資訊

原因說明

401

Request denied by Basic Auth check. No Basic Authentication information found.

請求未提供憑證。

401

Request denied by Basic Auth check. Invalid username and/or password.

請求憑證無效。

403

Request denied by Basic Auth check. Unauthorized consumer.

請求的調用方無存取權限。