Autenticación de comandos REST

La forma en la que se autentique para ejecutar comandos REST depende de la configuración del servidor y de la herramienta que utilice para ejecutar los comandos.
Nota: El uso de comandos REST requiere los mismos permisos que el uso de la interfaz web. Para obtener información sobre los permisos, consulte Roles y permisos.

Autenticación con nombre de usuario y contraseña

La forma más sencilla de autenticar los mandatos REST es utilizar un nombre de usuario y una contraseña. Por ejemplo, si va a utilizar el programa curl, puede especificar el nombre de usuario y la contraseña en el mandato, como en el siguiente código:
curl -k -u jsmith:passwd
  https://myserver.example.com:8443/cli/application/info
  ?application=JPetStore

Autenticación con clave de sesión

Algunos clientes requieren una clave de sesión para conectarse al servidor. Para utilizar una clave de sesión, tiene que iniciar sesión en el servidor de la forma habitual. Después, recupera la cave de sesión de su sesión en el servidor y utilícela en otras herramientas.

Para recuperar una clave de sesión, inicie sesión en el servidor de la forma habitual. Después, en el explorador web, busque el valor de la cabecera denominada UCD_SESSION_KEY. Puede buscarla por la cookie con ese nombre o buscarla en la lista de cabeceras asociadas a la página web. La forma en que vea esta información depende del explorador que utilice. Consulte la documentación de su explorador web para obtener más información.

Puede utilizar esa clave de sesión para autenticarse para utilizar comandos REST. Por ejemplo, puede añadir la siguiente cabecera a la solicitud:
UCD_SESSION_KEY:sessionKey
Utilice el valor de la cookie UCD_SESSION_KEY como sessionKey.

Autenticación en scripts y programas

Muchos lenguajes de programación y scripts pueden llamar a mandatos REST.
El siguiente ejemplo es un script Python que se autentica añadiendo la contraseña a la cabecera de la solicitud.
#!/usr/bin/env python

import urllib2
import json
import base64
import sys

if not len(sys.argv) == 3:
  print 'usage: script <username> <password>'
  exit(1)

username = sys.argv[1]
password = sys.argv[2]

epass = base64.b64encode(username + ':' + password)
print 'base64 encoded: ' + epass
baseUrl = 'ucdeploy.example.org:8443'

url = 'https://' + baseUrl + '/cli/application/info' + '?application=JPetStore'

opener = urllib2.build_opener(urllib2.HTTPHandler)
req = urllib2.Request(url)
req.add_header('Authorization', 'Basic '+epass)
req.get_method = lambda: 'GET'

resp = opener.open(req)
print resp.read()

Autenticación en un script Groovy

Para obtener un ejemplo de autenticación en un script Groovy, consulte la página siguiente: http://devblog.laraziosi.org/extensibility/index.php/devops-articles/6-getting-started-with-the-ibm-urbancode-deploy-rest-api-and-groovy

Autenticación en una clase Java

El siguiente código Java™ es un ejemplo simple de autenticación con un nombre de usuario y una contraseña. El código acepta todos los certificados, pero podrá modificar el código para controlar los certificados que se aceptarán.

Este ejemplo requiere los archivos JAR HttpComponents-Util.jar y uDeployRestClient.jar. El archivo HttpComponents-Util.jar se encuentra disponible en la carpeta opt del servidor. El archivo uDeployRestClient.jar está disponible en muchos plug-ins de núcleo, como, por ejemplo, el plug-in Aplicaciones de despliegue de UrbanCode.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;

import com.urbancode.commons.httpcomponentsutil.HttpClientBuilder;

public class RESTExample {

  public static void main(String[] args) {

  // suppress log4j messages from UCD library
  Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);

  HttpClientBuilder clientBuilder = new HttpClientBuilder();
  clientBuilder.setUsername("admin");
  clientBuilder.setPassword("admin");

  // for SSL enabled servers, accept all certificates
  clientBuilder.setTrustAllCerts(true); 
  DefaultHttpClient client = clientBuilder.buildClient();

  try {
    HttpGet request = new HttpGet(new URI(
      "https://ucdeploy.example.org:8443/cli/application/info?application=JPetStore"));

    try {
      HttpResponseresp = client.execute(request);
      BufferedReaderbr = new BufferedReader ( 
        new InputStreamReader(resp.getEntity().getContent()));

      String currentLine = new String();
      while ((currentLine = br.readLine()) != null){
        System.out.print(currentLine);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  } catch (URISyntaxException e) {
    e.printStackTrace();
  }

  }

}

Importar el certificado de servidor

El certificado de servidor predeterminado no está firmado. Algunas herramientas no se conectan a servidores con certificados sin firmar de forma predeterminada. Para acceder a un servidor con un certificado autofirmado, puede decirle a la herramienta que se conecte de forma no segura o importar el certificado en el cliente. Siga estos pasos para importar el certificado en el cliente:
  1. Exporte el certificado de servidor a un archivo:
    1. En el sistema que aloja servidor IBM® UrbanCode Deploy, abra el archivo server.xml en un editor de texto. De forma predeterminada, este archivo se encuentra en la ubicación server_install/opt/tomcat/conf/server.xml. El directorio de instalación del servidor predeterminado es /opt/ibm-ucd/server en Linux y C:\Archivos de programa\ibm-ucd\server en Windows.
    2. En el archivo server.xml, busque la siguiente línea de código y anote los valores de los atributos keystoreFile y keystorePass:
      sslProtocol="TLS"
      keystoreFile="conf/tomcat.keystore"
      keystorePass="changeit" />
    3. En una ventana de línea de comandos, ejecute el siguiente comando:
      keytool -v -list -keystore keyStoreFileName
      Utilice el nombre del atributo keystoreFile del archivo server.xml para keyStoreFileName. Cuando el comando le solicite una contraseña, especifique el valor del atributo keystorePass. El valor predeterminado es changeit.
    4. En el resultado del comando, busque el alias del servidor. Por ejemplo, el resultado del comando podría ser un código similar a este:
      Keystore type: JKS
      Keystore provider: SUN
      
      Your keystore contains 1 entry
      
      Alias name: server
      Creation date: Mar 19, 2014
      Entry type: PrivateKeyEntry
      En este código el alias es server.
    5. Ejecute el siguiente comando para exportar el certificado a un archivo y especifique la contraseña de nuevo:
      keytool -exportcert 
        -alias serverAlias 
        -keystore keyStoreFileName 
        -storetype jks 
        -file server.cert
      Utilice el alias del servidor para serverAlias.
  2. Copie el archivo server.cert en el sistema del cliente.
  3. Importe el archivo server.cert en el almacén de claves del sistema del cliente:
    1. En una ventana de línea de comandos del sistema del cliente, ejecute el siguiente comando y especifique la contraseña del almacén de claves del cliente. El valor predeterminado es changeit.
      jreLocation\jre\bin\keytool.exe -importcert 
        -alias serverAlias
        -file tomcat.cert 
        -storetype jks 
        -keystore jreLocation\jre\lib\security\cacerts
      Utilice la ubicación del JRE o JDK parajreLocation.
Ahora, algunas de las herramientas que utilizan este JRE o JDK aceptarán el certificado del servidor. Es posible que otras herramientas, como curl, no acepten todavía el certificado del servidor porque no está firmado. Para resolver este problema, configure un certificado firmado para el servidor.

Comentarios