In questo argomento viene descritto come utilizzare l'autenticazione basata su sessione NSX per generare un cookie JSESSIONID quando si utilizza l'API. Utilizzare questo metodo per ridurre il numero di volte che è necessario immettere nome utente e password. È possibile utilizzare questo tipo di autenticazione con autenticazione vIDM e LDAP.

NSX utilizza diversi meccanismi per autenticare gli utenti NSX. Includono:

  • Autenticazione HTTP
  • Autenticazione basata sulla sessione
  • Identità entità o autenticazione basata su certificato
  • Single Sign-On che utilizza vIDM e Cloud Service Platform (CSP)

NSX utilizza un nome utente e una password per generare un cookie di sessione durante la creazione della sessione. Una volta creato il cookie di sessione, le richieste API successive possono facoltativamente utilizzare il cookie di sessione anziché le credenziali di nome utente e password. Questo significa che lo stato della sessione è specifico dell'NSX Manager specifico che ha generato il cookie della sessione. Quando i client effettuano richieste a NSX Manager, esso consente ai client di eseguire l'autenticazione solo se il cookie di sessione che presentano corrisponde a uno dei cookie generati dal gestore. Quando un utente si disconnette da NSX Manager, il cookie di sessione viene eliminato immediatamente dal reverse-proxy di NSX Manager e non può essere riutilizzato. Le sessioni inattive scadono automaticamente o possono essere eliminate tramite l'API.

L'accesso utilizzando la richiesta API genera i dettagli del registro di controllo. Questa registrazione è sempre abilitata per impostazione predefinita e non può essere disabilitata. Il controllo delle sessioni inizia all'avvio del sistema. I messaggi del registro di controllo includono il testo audit="true" nella parte dei dati strutturati del messaggio di log.

In questo esempio viene descritto l'utilizzo di cURL per creare l'autenticazione basata su sessione per le chiamate API.

Procedura

  1. Per creare un nuovo cookie di sessione che esegue l'autenticazione in NSX Manager e recupera XSRF dall'intestazione, immettere:
    # curl -v -k -c session.txt -X POST -d '[email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 > /dev/null | grep -i xsrf < x-xsrf-token: 5a764b19-5ad2-4727-974d-510acbc171c8

    In questo esempio, il comando cURL esegue l'autenticazione nel gestore, posiziona il cookie di sessione nel file sessioni.txt e scrive tutte le intestazioni di risposta HTTP nel file intestazioni.txt. Sarà necessario utilizzare una delle intestazioni di headers.txt, l'intestazione x-xsrf-token, da fornire nelle richieste successive.

    È inoltre possibile utilizzare la codifica unicode/URI standard per il simbolo @ nel nome utente.

    Di seguito è disponibile un esempio del contenuto della sessione:

    # 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. Se è necessario creare due sessioni, cambiare il nome dei file sessione.txt in modo che entrambe le sessioni siano valide.
    # curl -v -k -c session1.txt -X POST -d 'j_username= [email protected]&j_password=SecretPwsd3c4d' https://<manager-ip>/api/session/create 2>&1 > /dev/null | 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 > /dev/null | grep -i xsrf < x-xsrf-token: abf1fa2c-86d5-47e4-9a0a-242424dd1761
  3. Per le chiamate successive, utilizzare il cookie della sessione e l'intestazione xsrf del passaggio precedente.
    # 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
        
    Se si utilizza lo stesso cookie di sessione con un altro nodo nel cluster, il comando non riesce e viene visualizzato il messaggio di errore:
    The credentials were incorrect or the account specified has been locked.","error_code":403.

    Quando la sessione scade, NSX Manager risponde con una risposta HTTP 403 Negato. È quindi necessario ottenere un nuovo cookie di sessione e x-xsrf-token.

  4. Per configurare l'impostazione di scadenza della sessione, utilizzare il comando dell'API connection_timeout. La scadenza della sessione predefinita è di 1800 secondi (30 minuti).
    1. Utilizzare GET https://<nsx-mgr>/api/v1/cluster/api-service per visualizzare uno snapshot della configurazione corrente.
      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
              }        ,
              {
                  "name": "TLS_ECDSA_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
      }
      
    2. Modificare il JSON con i valori desiderati e rimuovere tutti i campi introdotti da un carattere di sottolineatura (_xxxx), ad eccezione di _revision.
       GET https://<nsx-mgr>/api/v1/cluster/api-service
      {
          "global_api_concurrency_limit": 199,
          "client_api_rate_limit": 100,
          "client_api_concurrency_limit": 40,
          "connection_timeout": 30,
          "redirect_host": "",
          "cipher_suites": [     
            {"enabled": true, "name": "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"},
            {"enabled": true, "name": "TLS_RSA_WITH_AES_256_GCM_SHA384"},
            {"enabled": true, "name": "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},
            {"enabled": true, "name": "TLS_RSA_WITH_AES_128_GCM_SHA256"}
            {"enabled": true, "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384}",
            {"enabled": true, "name": "TLS_RSA_WITH_AES_256_CBC_SHA256"},
            {"enabled": true, "name": "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},
            {"enabled": true, "name": "TLS_RSA_WITH_AES_256_CBC_SHA"},
            {"enabled": true, "name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"},
            {"enabled": true, "name": "TLS_RSA_WITH_AES_128_CBC_SHA256"},
            {"enabled": false, "name": "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"},
            {"enabled": true, "name": "TLS_RSA_WITH_AES_128_CBC_SHA"},
        
            {"enabled": true, "name": "TLS_ECDSA_WITH_AES_256_GCM_SHA384"},
          ],
            "protocol_versions": [
              {"enabled": true, "name": "TLSv1.1"},
          {"enabled": true, "name": "TLSv1.2"}
        ]    
          "_revision": 0
      }
      
    3. Utilizzare PUT https://<nsx-mgr>/api/v1/cluster/api-service per modificare la configurazione corrente.
  5. Per eliminare un cookie di sessione, utilizzare il comando /api/session/destroy API.
    curl -k -b cookies.txt -H "`grep x-xsrf-token headers.txt`" -X POST https://<nsx-manager>/api/session/destroy
    Ad esempio:
    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
    Risposta:
    {
        "module_name" : "common-services",
        "error_message" : "The credentials were incorrect or the account specified has been locked.",
        "error_code" : "403"
    }
    

Operazioni successive

Per esaminare i requisiti per l'autenticazione degli utenti con il servizio di autenticazione supportato basato sulla sessione, vedere Integrazione con VMware Identity Manager/Workspace ONE Access o Integrazione con LDAP.