當您需要在網關層面進行統一的身分識別驗證和授權時,可以啟用網關JWT認證,確保只有經過認證的請求才能進入後端服務。
背景資訊
JWT(JSON Web Token)是一種常用的身份認證和鑒權機制。JWT中會攜帶一些使用者資訊和一個儲存加密後資訊的欄位。將加密後的資訊欄位進行解密,與原始使用者資訊欄位進行比較,可以驗證該使用者的資訊是否有效,從而完成身份認證。更多資訊,請參見JWT。
前提條件
操作步驟
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在入口網關頁面,單擊目標網關名稱。
在網關概覽導覽列,選擇 。
在JWT認證配置設定精靈,開啟啟用網關JWT認證開關,進行相關配置,然後單擊下一步。
配置項
說明
Issuer
JWT的頒發者。本樣本配置為testing@secure.istio.io。
JWKS來源
選擇jwks。
Key
配置樣本:
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
進階選項
單擊進階選項,在JWT規則進階選項對話方塊,您可以按需自訂Token的位置、是否透傳JWT、是否將JWT中的Payload資訊放在請求Header中透傳等。配置完成後,單擊確定。
在匹配規則設定精靈,進行相關配置,然後單擊提交。
配置項
說明
匹配模式
本文選擇選中請求必須經過認證。取值說明如下:
選中請求必須經過認證:選中的請求必須進行JWT認證。
選中請求可跳過認證:選中的請求可以不進行JWT認證。
匹配規則
選中自訂匹配規則,開啟HTTP路徑(Path)開關,配置為/productpage。該配置表示路徑為/productpage的請求只有通過JWT認證,才能進行訪問;其他請求(配置規則之外的路徑)可以不執行JWT認證。
說明當其他請求進行訪問時,不攜帶JWT的請求可以訪問成功,攜帶錯誤的JWT的請求會訪問失敗。
建立成功後,在完成設定精靈會顯示網關JWT認證建立成功和Service Mesh原生的安全資源。您可以單擊查看YAML,查看資源的具體配置。
驗證JWT認證配置是否生效。
執行以下命令,設定環境變數。
TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
執行以下命令,進行訪問測試。
測試一:訪問
/productpage
路徑且攜帶正確JWTcurl -I http://${ASM網關IP地址}/productpage -H "Authorization: Bearer $TOKEN"
樣本輸出:
HTTP/1.1 200 OK content-type: text/html; charset=utf-8 content-length: 4294 server: istio-envoy date: Tue, 17 Jan 2023 08:47:34 GMT x-envoy-upstream-service-time: 17
測試二:訪問
/productpage
路徑且不攜帶JWTcurl -I http://${ASM網關IP地址}/productpage
樣本輸出:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 17 Jan 2023 08:50:31 GMT server: istio-envoy
測試三:訪問
/productpage
路徑且攜帶錯誤JWTcurl -I http://${ASM網關IP地址}/productpage -H "Authorization: Bearer invaild token"
樣本輸出:
HTTP/1.1 401 Unauthorized www-authenticate: Bearer realm="http://114.55.XXX.XXX/productpage", error="invalid_token" content-length: 79 content-type: text/plain date: Tue, 17 Jan 2023 08:51:47 GMT server: istio-envoy
測試四:訪問其他路徑且不攜帶JWT
curl -I http://${ASM網關IP地址}/api/v1/products/1
HTTP/1.1 200 OK content-type: application/json content-length: 195 server: istio-envoy date: Tue, 17 Jan 2023 08:55:10 GMT x-envoy-upstream-service-time: 16
由以上樣本輸出可以得到如下資訊。訪問結果符合預期,說明JWT認證配置生效。
類型
訪問是否成功
訪問
/productpage
路徑且攜帶正確JWT是
訪問
/productpage
路徑且不攜帶JWT否
訪問
/productpage
路徑且攜帶錯誤JWT否
訪問其他路徑且不攜帶JWT
是
相關文檔
您可以自訂ASM網關訪問日誌的內容,及時發現潛在的安全問題。具體操作,請參見產生和採集ASM網關訪問日誌。
您可以啟用網格審計功能,記錄或追溯不同使用者的日常操作,也可以為網格資源操作配置審計警示,在重要資源變動時及時發出警示通知到警示連絡人。具體操作,請參見使用KubeAPIAction Trail和為網格資源操作配置審計警示。
您可以對入口網關進行JWT請求鑒權,使請求必須帶有JWT Token,才能訪問服務成功。具體操作,請參見在ASM中對入口網關進行JWT請求鑒權。