En este tema, se describe cómo utilizar la autenticación basada en sesiones de NSX para generar una cookie JSESSIONID cuando se utiliza la API. Utilice este método para reducir el número de veces que tiene que introducir su nombre de usuario y su contraseña. Puede utilizar este tipo de autenticación con la autenticación LDAP y vIDM.

NSX utiliza varios mecanismos diferentes para autenticar usuarios de NSX. Entre ellas, se incluyen las siguientes:

  • Autenticación HTTP
  • Autenticación basada en sesión
  • Autenticación basada en certificado o identidad principal
  • Inicio de sesión único mediante vIDM y Cloud Service Platform (CSP)

NSX utilizará un nombre de usuario y una contraseña para generar una cookie de sesión al crear la sesión. Una vez creada la cookie de sesión, las solicitudes de API posteriores podrían utilizar opcionalmente esta cookie de sesión en lugar de las credenciales de nombre de usuario y contraseña. Esto significa que el estado de la sesión es específico de la instancia de NSX Manager que generó la cookie de sesión. Cuando los clientes realizan solicitudes a NSX Manager, solo permite que los clientes se autentiquen si la cookie de sesión que presentan coincide con una de las la cookies generadas por el administrador. Cuando un usuario cierra sesión en NSX Manager, la cookie de la sesión se elimina inmediatamente del proxy inverso de NSX Manager y no se puede volver a utilizar. Las sesiones inactivas se cerrarán automáticamente al agotarse el tiempo de espera, o bien puede eliminarlas mediante la API.

El acceso mediante la solicitud de API genera detalles del registro de auditoría. Este registro siempre está habilitado y no se puede deshabilitar. La auditoría de sesiones se inicia al iniciar el sistema. Los mensajes de registro de auditoría incluyen el texto audit="true" en los datos estructurados forme parte del mensaje de registro.

En este ejemplo, se describe el uso de cURL para crear una autenticación basada en sesiones para llamadas de API.

Procedimiento

  1. Para crear una nueva cookie de sesión que se autentique en NSX Manager y recupere xsrf del encabezado, introduzca:
    # curl -i -k -c session.txt -X POST -d '[email protected]&j_password=SecretPwsd3c4d' https://<nsx-manager>/api/session/create 2>&1 > response.txt

    En este ejemplo, el comando cURL se autentica en el administrador, coloca la cookie de sesión en el archivo sessions.txt y escribe todos los encabezados de respuesta HTTP en el archivo headers.txt. Deberá utilizar uno de los encabezados de headers.txt, el encabezado x-xsrf-token, para usarlo en solicitudes posteriores.

    También puede utilizar la codificación Unicode/URI estándar para la @ en el nombre de usuario.

    A continuación se incluye un ejemplo del contenido de la sesión:

    # 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. Si necesita crear dos sesiones, cambie el nombre de los archivos de session.txt para que ambas sesiones sean válidas.
    curl -i -k -c session.txt -X POST -d '[email protected]&j_password=SecretPwsd3c4d' https://<nsx-manager>/api/session/create 2>&1 > response.txt
    # curl -i -k -c session2.txt -X POST -d 'j_username= [email protected]&j_password=SecretPwsd3c4d' https://<nsx-manager>/api/session/create 2>&1 > response2.txt
  3. Para las llamadas posteriores, utilice la cookie de sesión y el encabezado xsrf del paso anterior.
    # curl -k -b session.txt -H "x-xsrf-token: 5a764b19-5ad2-4727-974d-510acbc171c8"
          https://<nsx-manager>/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
        
    Si utiliza la misma cookie de sesión con otro nodo del clúster, se producirá un error en el comando y aparecerá el siguiente mensaje:
    The credentials were incorrect or the account specified has been locked.","error_code":403.

    Cuando la sesión caduque, NSX Manager responderá con una respuesta HTTP 403 Prohibido. A continuación, deberá obtener una nueva cookie de sesión y x-xsrf-token.

  4. Para configurar la opción de caducidad de la sesión, utilice el comando de API connection_timeout. La caducidad predeterminada de la sesión es 1800 segundos (30 minutos).
    1. Utilice GET https://<nsx-mgr>/api/v1/cluster/api-service para ver una instantánea de la configuración actual.
      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. Edite el archivo JSON con los valores deseados y elimine todos los campos con guion bajo (_xxxx), excepto _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. Utilice PUT https://<nsx-mgr>/api/v1/cluster/api-service para modificar la configuración actual.
  5. Para eliminar una cookie de sesión, utilice el comando de API /api/session/destroy.
    curl -k -b session.txt -H "x-xsrf-token: `grep -i xsrf response.txt | awk '{print $2}'`" https://<nsx-manager>/api/v1/node/version
    Por ejemplo:
    curl -k -b session.txt -H "x-xsrf-token: `grep -i xsrf response.txt | awk '{print $2}'`" https://<nsx-manager>/api/v1/node/version
    Respuesta:
    {
        "module_name" : "common-services",
        "error_message" : "The credentials were incorrect or the account specified has been locked.",
        "error_code" : "403"
    }
    

Qué hacer a continuación

Para revisar los requisitos para autenticar usuarios con el servicio de autenticación compatible basado en sesiones, consulte Integración con VMware Identity Manager/Workspace ONE Access o Integración con LDAP.