Authentifizierung für REST-Befehle

Wie Sie die Authentifizierung durchführen, um REST-Befehle ausführen zu können, hängt davon ab, wie der Server eingerichtet wurde und welches Tool Sie verwenden, um die Befehle auszuführen.
Anmerkung: Die Verwendung von REST-Befehlen erfordert dieselben Berechtigungen wie für die Nutzung der Webschnittstelle. Informationen über Berechtigungen finden Sie unter Rollen und Berechtigungen.

Authentifizierung mit einem Benutzernamen und Kennwort

Die einfachste Möglichkeit, die Authentifizierung für REST-Befehle durchzuführen, besteht darin, einen Benutzernamen und ein Kennwort zu verwenden. Beispiel: Wenn Sie das Programm curl verwenden, können Sie den Benutzernamen und das Kennwort im Befehl angeben (siehe folgender Code):
curl -k -u jsmith:passwd
  https://myserver.example.com:8443/cli/application/info
  ?application=JPetStore

Authentifizierung mit einem Sitzungsschlüssel

Einige Clients erfordern einen Sitzungsschlüssel zur Herstellung der Verbindung mit dem Server. Um einen Sitzungsschlüssel verwenden zu können, müssen Sie sich wie üblich beim Server anmelden. Danach rufen Sie den Sitzungsschlüssel aus Ihrer Sitzung mit dem Server ab und verwenden diesen Sitzungsschlüssel in anderen Tools.

Um einen Sitzungsschlüssel abzurufen, müssen Sie sich beim Server wie üblich anmelden. Danach suchen Sie im Web-Browser den Wert des Headers, der mit UCD_SESSION_KEY bezeichnet ist. Sie können nach dem Cookie mit diesem Namen suchen oder die Liste der Header einsehen, die mit der Webseite verbunden sind. Die Art, wie Sie diese Informationen sehen, hängt von dem Browser ab, den sie verwenden. Weitere Informationen finden Sie in der Dokumentation des Web-Browsers.

Dann können Sie diese Sitzungsschlüssel verwenden, um die Authentifizierung für REST-Befehle durchzuführen. Sie können beispielsweise folgenden Header der Anforderung hinzufügen:
UCD_SESSION_KEY:sessionKey
Verwenden Sie den Wert des UCD_SESSION_KEY-Cookies als sessionKey.

Authentifizierung in Scripts und Programmen

Viele Programmier- und scriptbasierte Sprachen können REST-Befehle aufrufen.
Beim folgenden Beispiel handelt es sich um ein Python-Script, das eine Authentifizierung durch Hinzufügen des Kennworts zum Anforderungsheader durchführt.
#!/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()

Authentifizierung in einem Groovy-Script

Auf folgender Seite finden Sie ein Beispiel für die Authentifizierung in einem Groovy-Script: http://devblog.laraziosi.org/extensibility/index.php/devops-articles/6-getting-started-with-the-ibm-urbancode-deploy-rest-api-and-groovy

Authentifizierung in einer Java-Klasse

Der folgende Java™-Code ist ein einfaches Beispiel für die Authentifizierung mit einem Benutzernamen und Kennwort. Für den Code werden alle Zertifikate akzeptiert, jedoch können Sie ihn entsprechend ändern, um zu steuern, welche Zertifikate akzeptiert werden.

Bei diesem Beispiel sind die JAR-Dateien HttpComponents-Util.jar und uDeployRestClient.jar erforderlich. Die Datei HttpComponents-Util.jar ist im Ordner opt auf dem Server verfügbar. Die Datei uDeployRestClient.jar ist in vielen Kern-Plug-ins (zum Beispiel im UrbanCode Deploy Applications-Plug-in) verfügbar.

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();
  }

  }

}

Importieren des Serverzertifikats

Das Standardserverzertifikat ist nicht signiert. Manche Tools verbinden sich standardmäßig nicht mit Servern, die nicht signierte Zertifikate haben. Um auf einen Server mit einem selbst signierten Zertifikat zuzugreifen, können Sie das Tool anweisen, die Verbindung unsicher herzustellen, oder Sie können das Zertifikat in Ihren Client importieren. Gehen Sie wie folgt vor, um das Zertifikat in Ihrem Client zu importieren:
  1. Exportieren Sie das Serverzertifikat in eine Datei:
    1. Öffnen Sie auf dem Computer, auf dem der IBM® UrbanCode Deploy-Server läuft, die Datei server.xml in einem Texteditor. Standardmäßig befindet sich diese Datei unter Serverinstallationsverzeichnis/opt/tomcat/conf/server.xml. The default server installation directory is /opt/ibm-ucd/server on Linux and C:\Program Files\ibm-ucd\server on Windows.
    2. In der server.xml-Datei suchen Sie die folgenden Codezeilen und notieren sich die Werte der Attribute keystoreFile und keystorePass:
      sslProtocol="TLS"
      keystoreFile="conf/tomcat.keystore"
      keystorePass="changeit" />
    3. Führen Sie in einem Befehlszeilenfenster folgenden Befehl aus:
      keytool -v -list -keystore keyStoreFileName
      Verwenden Sie den Namen des keystoreFile-Attributs der Datei server.xml für die Variable keyStoreFileName. Wenn Sie aufgefordert werden, ein Kennwort anzugeben, geben Sie den Wert des keystorePass-Attributs ein. Der Standardwert ist changeit.
    4. Dem Ergebnis des Befehls entnehmen Sie den Alias des Servers. Das Ergebnis des Befehls könnte beispielsweise wie folgt aussehen:
      Keystore type: JKS
      Keystore provider: SUN
      
      Your keystore contains 1 entry
      
      Alias name: server
      Creation date: Mar 19, 2014
      Entry type: PrivateKeyEntry
      In diesem Code ist der Alias server.
    5. Führen Sie den folgenden Befehl aus, um das Zertifikat in eine Datei zu exportieren und das Kennwort erneut anzugeben:
      keytool -exportcert
        -alias serverAlias
        -keystore keyStoreFileName
        -storetype jks
        -file server.cert
      Verwenden Sie den Alias des Servers für serverAlias.
  2. Kopieren Sie die Datei server.cert auf den Client-Computer.
  3. Importieren Sie die Datei server.cert in den Schlüsselspeicher des Client-Computers:
    1. Führen Sie in einem Befehlszeilenfenster auf dem Client-Computer den folgenden Befehl aus und geben Sie das Kennwort für den Schlüsselspeicher auf dem Client an. Der Standardwert ist changeit.
      jreLocation\jre\bin\keytool.exe -importcert
        -alias serverAlias
        -file tomcat.cert
        -storetype jks
        -keystore jreLocation\jre\lib\security\cacerts
      Verwenden Sie den Standort der JRE oder des JDK für jreLocation.
Einige Tools, die diese JRE oder diesen JDK verwenden, akzeptieren jetzt das Serverzertifikat. Andere Tools wie zum Beispiel curl akzeptieren das Serverzertifikat möglicherweise weiterhin nicht, da es nicht signiert ist. Richten Sie ein signiertes Zertifikat für den Server ein, um dieses Problem zu beheben.

Feedback