全部產品
Search
文件中心

Alibaba Cloud Service Mesh:在ASM安全性原則中配置JWT認證

更新時間:Jun 30, 2024

當您需要在服務網格中進行身分識別驗證和授權控制時,可以在ASM安全性原則中配置JWT(JSON Web Token)認證,確保只有攜帶有效JWT的請求才能訪問受保護的資源,提高服務間通訊的安全性和隱私保護。

背景資訊

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

前提條件

操作步驟

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

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格資訊安全中心 > ASM安全性原則

  3. ASM安全性原則頁面,單擊建立

  4. 建立ASM安全性原則對話方塊,單擊JWT認證,然後單擊確定

    1. JWT認證配置設定精靈,進行相關配置,然後單擊下一步

      配置項

      配置樣本

      ASM安全性原則名稱

      test-jwt

      認證規則

      Issuer

      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"}]}
    2. 工作負載和匹配規則設定精靈,單擊添加工作負載組。在建立工作負載組對話方塊,進行相關配置,單擊確定,然後單擊提交

      本樣本配置如下。

      配置項

      說明

      工作負載組名稱

      配置為test-policy

      工作負載列表

      1. 單擊添加工作負載

      2. 添加工作負載對話方塊,選擇網關生效

      3. 選擇負載地區,選中目標負載,單擊添加表徵圖,將選中的負載添加到已選擇地區,然後單擊確定

      匹配規則列表

      匹配模式有以下兩種:

      • 選中請求必須經過認證:請求必須攜帶正確的JWT,才能訪問成功。

      • 選中請求可跳過認證:不攜帶JWT或者攜帶正確JWT的請求可以訪問成功,攜帶錯誤的JWT的請求會訪問失敗。

      本樣本匹配模式選擇選中請求必須經過認證匹配規則選中自訂匹配規則,單擊添加匹配規則,進行如下配置。

      • 規則1:開啟HTTP路徑(Path)開關,配置為/static/*

      • 規則2:開啟HTTP路徑(Path)開關,配置為/api/*

      image.png

      建立成功後,在完成設定精靈,會顯示ASM安全性原則建立成功。您可以單擊查看YAML查看建立的資源,也可以單擊完成,返回ASM安全性原則頁面,查看新建立的安全性原則。

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

    1. 執行以下命令,進行訪問測試。

      curl -I http://${網關地址}/productpage  # 返回200。
      curl -I http://${網關地址}/api/v1/products/1  # 返回403。
      curl -I http://${網關地址}/static/jquery.min.js  # 返回403。
      
      # 設定JWT。
      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
      
      # 下面請求均返回200。
      curl -I http://${網關地址}/productpage -H "Authorization: Bearer $TOKEN"
      curl -I http://${網關地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN"
      curl -I http://${網關地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"

      按照上文的配置規則,以/api/static開頭的請求必須攜帶正確的JWT,才能訪問成功;以/productpage開頭的請求不攜帶JWT或者攜帶正確的JWT,才能訪問成功。訪問結果與代碼中注釋一致,表明JWT認證配置生效。

    2. 修改JWT認證的配置規則。

      1. ASM安全性原則頁面的操作列,單擊目標JWT認證安全性原則對應的編輯

      2. JWT認證配置設定精靈,單擊下一步

      3. 工作負載和匹配規則設定精靈的操作列,單擊目標工作負載組對應的編輯

      4. 建立工作負載組對話方塊,修改相關配置,單擊確定,然後單擊提交

        本樣本配置如下。

        配置項

        說明

        匹配模式

        選擇選中請求可跳過認證

        匹配規則

        移除/api/*匹配規則,僅保留/static/*匹配規則。

        image.png

    3. 執行以下命令,驗證修改後的JWT認證配置是否生效。

      curl -I http://${網關地址}/productpage  # 返回403。
      curl -I http://${網關地址}/api/v1/products/1  # 返回403。
      curl -I http://${網關地址}/static/jquery.min.js   # 返回200。
      
      # 設定JWT。
      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
      
      # 下面請求均返回200。
      curl -I http://${網關地址}/productpage -H "Authorization: Bearer $TOKEN"
      curl -I http://${網關地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN"
      curl -I http://${網關地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"

      按照修改後的配置規則,以/static開頭的請求不攜帶JWT或者攜帶正確的JWT,才能訪問成功;其他請求必須攜帶正確的JWT,才能訪問成功。訪問結果與代碼中注釋一致,表明修改後的JWT認證配置生效。

相關文檔