本主題說明如何在使用 API 時,使用 NSX 以工作階段為基礎的驗證產生 JSESSIONID Cookie。使用此方法可減少必須輸入使用者名稱和密碼的次數。您可以將此類型的驗證與 vIDM 和 LDAP 驗證搭配使用。

NSX 使用數種不同的機制驗證 NSX 使用者。其中包括:

  • HTTP 驗證
  • 以工作階段為基礎的驗證
  • 主體身分識別或憑證式驗證
  • 使用 vIDM 和 RBAC 的 Single Sign On

NSX 會在工作階段建立期間使用使用者名稱和密碼產生工作階段 Cookie。創立工作階段 Cookie 後,後續 API 要求可以使用此工作階段 Cookie,而非使用者名稱和密碼認證。這表示工作階段狀態是執行工作階段之伺服器的本機狀態。用戶端向 NSX Manager 提出要求時,僅允許用戶端在其呈現的工作階段識別碼與伺服器產生的其中一個識別碼相符時才進行驗證。當任何使用者登出 NSX Manager 時,工作階段識別碼會立即銷毀,且無法重複使用。閒置工作階段會自動逾時,或者您可以使用 API 將其刪除。

使用 API 要求進行存取會產生稽核記錄詳細資訊。一律啟用此記錄,且無法停用。工作階段稽核會在系統啟動時啟動。稽核記錄訊息包含記錄訊息結構化資料部分中的文字 audit="true"。

此範例說明如何使用 cURL 為 API 呼叫建立以工作階段為基礎的驗證。

程序

  1. 若要建立新工作階段 Cookie,以便對 NSX Manager 進行驗證並從標頭擷取 xsrf,請輸入:
    # curl -v -k -c session.txt -X POST -d '[email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 | grep -i xsrf < x-xsrf-token: 5a764b19-5ad2-4727-974d-510acbc171c8

    在此範例中,cURL 命令對伺服器進行驗證、將工作階段 Cookie 置於 sessions.txt 檔案中,並將所有 HTTP 回應標頭寫入 headers.txt 檔案。您需要使用 headers.txt 中的其中一個標頭 (x-xsrf-token 標頭),在後續要求中提供。

    您也可以對使用者名稱中的 @ 使用標準 Unicode/URI 編碼。

    工作階段內容範例如下所示:

    # cat session.txt
          # Netscape HTTP Cookie File
          # https://curl.haxx.se/docs/http-cookies.html
          # This file was generated by libcurl! Edit at your own
            risk.
          # HttpOnly_172.182.183.135 FALSE / TRUE 0 JSESSIONID CFG588DF6DGF493C0EAEFC62685C42E1
  2. 如果您需要建立兩個工作階段,請變更 session.txt 檔案的名稱,讓這兩個工作階段都有效。
    # curl -v -k -c session1.txt -X POST -d 'j_username= [email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 | grep -i xsrf < x-xsrf-token: cbce48f3-48fc-46c0-a8e7-f2f55ebf8e15
    # curl -v -k -c session2.txt -X POST -d 'j_username= [email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 | grep -i xsrf < x-xsrf-token: abf1fa2c-86d5-47e4-9a0a-242424dd1761
  3. 對於後續呼叫,請使用上一步中的工作階段 Cookie 和 xsrf 標頭。
    # curl -k -b session.txt -H "x-xsrf-token: 5a764b19-5ad2-4727-974d-510acbc171c8"
          https://10.182.183.135/policy/api/v1/infra/segments
          {
            "results" : [ {
              "type" : "ROUTED",
              "subnets" : [ {
                "gateway_address" : "192.168.10.1/24",
                "network" : "192.168.10.0/24"
              } ],
              "connectivity_path" :
            "/infra/tier-1s/test_t1",
              "transport_zone_path" :
            "/infra/sites/default/enforcement-points/default/transport-zones/1b3a2f36-bfd1-443e-a0f6-4de01abc963e",
              "advanced_config" : {
                "address_pool_paths" : [ ],
                "hybrid" : false,
                "multicast" : true,
                "inter_router" : false,
                "local_egress" : false,
                "urpf_mode" : "STRICT",
                "connectivity" : "ON"
              },
              "admin_state" : "UP",
              "replication_mode" : "MTEP",
              "resource_type" : "Segment",
              "id" : "seg1",
              "display_name" : "seg1",
              "path" : "/infra/segments/seg1",
              "relative_path" : "seg1",
              "parent_path" : "/infra",
              "unique_id" :
            "6573d2c9-f4f9-4b37-b410-71bded8857c3",
              "marked_for_delete" : false,
              "overridden" : false,
              "_create_user" : "admin",
              "_create_time" : 1633331197569,
              "_last_modified_user" : "admin",
              "_last_modified_time" : 1633331252660,
              "_system_owned" : false,
              "_protection" : "NOT_PROTECTED",
              "_revision" : 1
            } ],
            "result_count" : 1,
            "sort_by" : "display_name",
            "sort_ascending" : true
        
    如果在叢集中將相同工作階段與另一個節點搭配使用,命令會失敗並顯示錯誤訊息:
    The credentials were incorrect or the account specified has been locked.","error_code":403.

    工作階段到期後,NSX Manager 將以 403 禁止 HTTP 作為回應。然後,您必須取得新的工作階段 Cookie 和 x-xsrf-token。

  4. 若要設定工作階段到期設定,請使用 connection_timeout API 命令。將預設工作階段到期時間設定為 1800 秒 (30 分鐘)。
    PUT https://<nsx-mgr>/api/v1/cluster/api-service
    GET https://<nsx-mgr>/api/v1/cluster/api-service
    {
        "session_timeout": 1800,
        "connection_timeout": 30,
        "protocol_versions": [
            {
                "name": "TLSv1.1",
                "enabled": true
            },
            {
                "name": "TLSv1.2",
                "enabled": true
            }
        ],
        "cipher_suites": [
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
                "enabled": true
            },
            {
                "name": "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_128_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_128_CBC_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_128_GCM_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_256_CBC_SHA",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_256_CBC_SHA256",
                "enabled": true
            },
            {
                "name": "TLS_RSA_WITH_AES_256_GCM_SHA384",
                "enabled": true
            }
        ],
        "redirect_host": "",
        "client_api_rate_limit": 100,
        "global_api_concurrency_limit": 199,
        "client_api_concurrency_limit": 40,
        "basic_authentication_enabled": true,
        "cookie_based_authentication_enabled": true,
        "resource_type": "ApiServiceConfig",
        "id": "reverse_proxy_config",
        "display_name": "reverse_proxy_config",
        "_create_time": 1658339081246,
        "_create_user": "system",
        "_last_modified_time": 1658339081246,
        "_last_modified_user": "system",
        "_system_owned": false,
        "_protection": "NOT_PROTECTED",
        "_revision": 0
    }
    
  5. 若要刪除工作階段 Cookie,請使用 /api/session/destroy API 命令。
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" -X POST https://<nsx-manager>/api/session/destroy
    例如:
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" https://$TESTHOST/api/session/destroy
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" https://$TESTHOST/api/v1/logical-ports
    回應:
    {
        "module_name" : "common-services",
        "error_message" : "The credentials were incorrect or the account specified has been locked.",
        "error_code" : "403"
    }
    

下一步

若要檢閱透過以工作階段為基礎的支援驗證服務對使用者進行驗證的需求,請參閱與 VMware Identity Manager/Workspace ONE Access 整合與 LDAP 整合