在ASM網(wǎng)關(guān)中配置JWT認(rèn)證
當(dāng)您需要在網(wǎng)關(guān)層面進(jìn)行統(tǒng)一的身份驗證和授權(quán)時,可以啟用網(wǎng)關(guān)JWT認(rèn)證,確保只有經(jīng)過認(rèn)證的請求才能進(jìn)入后端服務(wù)。
背景信息
JWT(JSON Web Token)是一種常用的身份認(rèn)證和鑒權(quán)機(jī)制。JWT中會攜帶一些用戶信息和一個存儲加密后信息的字段。將加密后的信息字段進(jìn)行解密,與原始用戶信息字段進(jìn)行比較,可以驗證該用戶的信息是否有效,從而完成身份認(rèn)證。更多信息,請參見JWT。
前提條件
操作步驟
登錄ASM控制臺,在左側(cè)導(dǎo)航欄,選擇 。
在網(wǎng)格管理頁面,單擊目標(biāo)實例名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在入口網(wǎng)關(guān)頁面,單擊目標(biāo)網(wǎng)關(guān)名稱。
在網(wǎng)關(guān)概覽導(dǎo)航欄,選擇 。
在JWT認(rèn)證配置配置向?qū)В蜷_啟用網(wǎng)關(guān)JWT認(rèn)證開關(guān),進(jìn)行相關(guān)配置,然后單擊下一步。
配置項
說明
Issuer
JWT的頒發(fā)者。本示例配置為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規(guī)則高級選項對話框,您可以按需自定義Token的位置、是否透傳JWT、是否將JWT中的Payload信息放在請求Header中透傳等。配置完成后,單擊確定。
在匹配規(guī)則配置向?qū)ВM(jìn)行相關(guān)配置,然后單擊提交。
配置項
說明
匹配模式
本文選擇選中請求必須經(jīng)過認(rèn)證。取值說明如下:
選中請求必須經(jīng)過認(rèn)證:選中的請求必須進(jìn)行JWT認(rèn)證。
選中請求可跳過認(rèn)證:選中的請求可以不進(jìn)行JWT認(rèn)證。
匹配規(guī)則
選中自定義匹配規(guī)則,打開HTTP路徑(Path)開關(guān),配置為/productpage。該配置表示路徑為/productpage的請求只有通過JWT認(rèn)證,才能進(jìn)行訪問;其他請求(配置規(guī)則之外的路徑)可以不執(zhí)行JWT認(rèn)證。
說明當(dāng)其他請求進(jìn)行訪問時,不攜帶JWT的請求可以訪問成功,攜帶錯誤的JWT的請求會訪問失敗。
創(chuàng)建成功后,在完成配置向?qū)@示網(wǎng)關(guān)JWT認(rèn)證創(chuàng)建成功和服務(wù)網(wǎng)格原生的安全資源。您可以單擊查看YAML,查看資源的具體配置。
驗證JWT認(rèn)證配置是否生效。
執(zhí)行以下命令,設(shè)置環(huán)境變量。
TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
執(zhí)行以下命令,進(jìn)行訪問測試。
測試一:訪問
/productpage
路徑且攜帶正確JWTcurl -I http://${ASM網(wǎng)關(guān)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網(wǎng)關(guān)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網(wǎng)關(guān)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網(wǎng)關(guān)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
由以上示例輸出可以得到如下信息。訪問結(jié)果符合預(yù)期,說明JWT認(rèn)證配置生效。
類型
訪問是否成功
訪問
/productpage
路徑且攜帶正確JWT是
訪問
/productpage
路徑且不攜帶JWT否
訪問
/productpage
路徑且攜帶錯誤JWT否
訪問其他路徑且不攜帶JWT
是
相關(guān)文檔
您可以自定義ASM網(wǎng)關(guān)訪問日志的內(nèi)容,及時發(fā)現(xiàn)潛在的安全問題。具體操作,請參見生成和采集ASM網(wǎng)關(guān)訪問日志。
您可以啟用網(wǎng)格審計功能,記錄或追溯不同用戶的日常操作,也可以為網(wǎng)格資源操作配置審計告警,在重要資源變動時及時發(fā)出告警通知到告警聯(lián)系人。具體操作,請參見使用KubeAPI操作審計和為網(wǎng)格資源操作配置審計告警。
您可以對入口網(wǎng)關(guān)進(jìn)行JWT請求鑒權(quán),使請求必須帶有JWT Token,才能訪問服務(wù)成功。具體操作,請參見在ASM中對入口網(wǎng)關(guān)進(jìn)行JWT請求鑒權(quán)。