全部產品
Search
文件中心

Alibaba Cloud Service Mesh:在ASM網關中配置JWT認證

更新時間:Jun 30, 2024

當您需要在網關層面進行統一的身分識別驗證和授權時,可以啟用網關JWT認證,確保只有經過認證的請求才能進入後端服務。

背景資訊

JWT(JSON Web Token)是一種常用的身份認證和鑒權機制。JWT中會攜帶一些使用者資訊和一個儲存加密後資訊的欄位。將加密後的資訊欄位進行解密,與原始使用者資訊欄位進行比較,可以驗證該使用者的資訊是否有效,從而完成身份認證。更多資訊,請參見JWT

前提條件

操作步驟

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇ASM網關 > 入口網關

  3. 入口網關頁面,單擊目標網關名稱。

  4. 在網關概覽導覽列,選擇網關安全 > JWT認證

  5. 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中透傳等。配置完成後,單擊確定

  6. 匹配規則設定精靈,進行相關配置,然後單擊提交

    配置項

    說明

    匹配模式

    本文選擇選中請求必須經過認證。取值說明如下:

    • 選中請求必須經過認證:選中的請求必須進行JWT認證。

    • 選中請求可跳過認證:選中的請求可以不進行JWT認證。

    匹配規則

    選中自訂匹配規則,開啟HTTP路徑(Path)開關,配置為/productpage。該配置表示路徑為/productpage的請求只有通過JWT認證,才能進行訪問;其他請求(配置規則之外的路徑)可以不執行JWT認證。

    說明

    當其他請求進行訪問時,不攜帶JWT的請求可以訪問成功,攜帶錯誤的JWT的請求會訪問失敗。

    建立成功後,在完成設定精靈會顯示網關JWT認證建立成功Service Mesh原生的安全資源。您可以單擊查看YAML,查看資源的具體配置。

  7. 驗證JWT認證配置是否生效。

    1. 執行以下命令,設定環境變數。

      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
    2. 執行以下命令,進行訪問測試。

      • 測試一:訪問/productpage路徑且攜帶正確JWT

        curl -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路徑且不攜帶JWT

        curl -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路徑且攜帶錯誤JWT

        curl -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

相關文檔