进行认证以运行 REST 命令

您进行认证以运行 REST 命令的方式取决于服务器的设置方式和您要用来运行这些命令的工具。
注: 使用 REST 命令与使用 Web 界面需要的许可权相同。有关许可权的信息,请参阅角色和许可权

使用用户名和密码进行认证

进行认证以运行 REST 命令的最简单方式是使用用户名和密码。例如,如果正在使用 curl 程序,那么可以在命令中指定用户名和密码,如以下代码中所示:
curl -k -u jsmith:passwd
  https://myserver.example.com:8443/cli/application/info
  ?application=JPetStore

使用会话密钥进行认证

某些客户机需要会话密钥才能连接至服务器。要使用会话密钥,必须照常登录服务器。然后,从您与服务器的会话中检索会话密钥,并在其他工具中使用该会话密钥。

要检索会话密钥,请照常登录服务器。然后在 Web 浏览器中查找名为 UCD_SESSION_KEY 的头的值。可以查找具有该名称的 cookie,也可以查看与网页相关联的头的列表。查看此信息的方式取决于您使用的浏览器。有关更多信息,请参阅您的 Web 浏览器的文档。

然后,可以使用该会话密钥进行认证以运行 REST 命令。例如,可以将以下头添加到请求:
UCD_SESSION_KEY:sessionKey
UCD_SESSION_KEY cookie 的值用作 sessionKey

在脚本和程序中进行认证

许多编程语言和脚本语言都可以调用 REST 命令。
以下示例是一个 Python 脚本,它通过将密码添加到请求头进行认证。
#!/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()

在 Groovy 脚本中进行认证

有关在 Groovy 脚本中进行认证的一个示例,请参阅以下页面:http://devblog.laraziosi.org/extensibility/index.php/devops-articles/6-getting-started-with-the-ibm-urbancode-deploy-rest-api-and-groovy

在 Java 类中进行认证

以下 Java™ 代码是一个使用用户名和密码进行认证的简单示例。此代码接受所有证书,但是您可以修改此代码,以控制将接受哪些证书。

此示例需要 HttpComponents-Util.jaruDeployRestClient.jar JAR 文件。可以在服务器上的 opt 文件夹中找到 HttpComponents-Util.jar 文件。许多核心插件(例如,UrbanCode Deploy 应用程序插件)中都提供了 uDeployRestClient.jar 文件。

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

  }

}

导入服务器证书

缺省服务器证书是未签名证书。缺省情况下,某些工具不会连接至具有未签名证书的服务器。要访问具有自签名证书的服务器,可以指示工具以非安全方式进行连接,也可以将该证书导入至您的客户机。执行以下步骤以将证书导入至您的客户机:
  1. 将服务器证书导出至文件:
    1. 在托管 IBM® UrbanCode Deploy 服务器的计算机上,在文本编辑器中打开 server.xml 文件。缺省情况下,此文件位于 server_install/opt/tomcat/conf/server.xml 位置。缺省服务器安装目录是 /opt/ibm-ucd/server(在 Linux 上)和 C:\Program Files\ibm-ucd\server(在 Windows 上)。
    2. server.xml 文件中,找到以下代码行并记下 keystoreFilekeystorePass 属性的值:
      sslProtocol="TLS"
      keystoreFile="conf/tomcat.keystore"
      keystorePass="changeit" />
    3. 在命令行窗口中,运行以下命令:
      keytool -v -list -keystore keyStoreFileName
      使用 server.xml 文件中的 keystoreFile 属性的名称替换 keyStoreFileName。当该命令提示您输入密码时,请指定 keystorePass 属性的值。缺省值为 changeit
    4. 从该命令的结果中,找到服务器的别名。例如,该命令的结果可能类似于以下代码:
      Keystore type: JKS
      Keystore provider: SUN
      
      Your keystore contains 1 entry
      
      Alias name: server
      Creation date: Mar 19, 2014
      Entry type: PrivateKeyEntry
      在此代码中,别名是 server
    5. 运行以下命令以将该证书导出至文件并再次指定密码:
      keytool -exportcert 
        -alias serverAlias 
        -keystore keyStoreFileName 
        -storetype jks 
        -file server.cert
      使用服务器的别名替换 serverAlias
  2. server.cert 文件复制到客户端计算机。
  3. server.cert 文件导入至客户端计算机的密钥库:
    1. 在客户端计算机上的命令行窗口中,运行以下命令并指定客户机上密钥库的密码。缺省值为 changeit
      jreLocation\jre\bin\keytool.exe -importcert 
        -alias serverAlias
        -file tomcat.cert 
        -storetype jks 
        -keystore jreLocation\jre\lib\security\cacerts
      使用 JRE 或 JDK 的位置替换 jreLocation
现在,使用此 JRE 或 JDK 的某些工具会接受服务器证书。因为服务器证书未签名,所以其他工具(例如,curl)可能仍然不会接受服务器证书。要解决此问题,请为服务器设置签名证书。

反馈