REST 명령 인증

REST 명령을 실행하도록 인증하는 방식은 서버가 설정된 방식 및 명령을 실행하는 데 사용하는 도구에 따라 다릅니다.
참고: REST 명령을 사용하려면 웹 인터페이스를 사용하는 경우와 동일한 권한이 필요합니다. 권한에 대한 정보는 역할 및 권한의 내용을 참조하십시오.

사용자 이름 및 비밀번호로 인증

REST 명령을 인증하는 가장 단순한 방법은 사용자 이름 및 비밀번호를 사용하는 방법입니다. 예를 들어, curl 프로그램을 사용하는 경우, 다음 코드에서와 같이 명령에 사용자 이름 및 비밀번호를 지정할 수 있습니다.
curl -k -u jsmith:passwd
  https://myserver.example.com:8443/cli/application/info
  ?application=JPetStore

세션 키로 인증

일부 클라이언트의 경우, 서버에 연결하기 위해 세션 키가 필요합니다. 세션 키를 사용하려면 평소와 같이 서버에 로그인해야 합니다. 그런 다음 서버의 세션에서 세션 키를 검색하고 다른 도구에서 이 세션 키를 사용합니다.

세션 키를 검색하려면 평소와 같이 서버에 로그인하십시오. 그런 다음 웹 브라우저에서 UCD_SESSION_KEY라는 헤더의 값을 찾으십시오. 이 이름의 쿠키를 찾거나 웹 페이지와 연관된 헤더 목록을 볼 수 있습니다. 이 정보를 보는 방법은 사용 중인 브라우저에 따라 다릅니다. 자세한 정보는 웹 브라우저의 문서를 참조하십시오.

그런 다음 이 세션 키를 사용하여 REST 명령을 인증할 수 있습니다. 예를 들어, 다음 헤더를 요청에 추가할 수 있습니다.
UCD_SESSION_KEY:sessionKey
UCD_SESSION_KEY 쿠키의 값을 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 파일이 필요합니다. HttpComponents-Util.jar 파일은 서버의 opt 폴더에서 사용 가능합니다. uDeployRestClient.jar 파일은 UrbanCode Deploy 애플리케이션 플러그인과 같은 많은 코어 플러그인에서 사용 가능합니다.

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 파일에서 다음 코드 행을 찾아 keystoreFile and keystorePass 속성의 값을 기록하십시오.
      sslProtocol="TLS"
      keystoreFile="conf/tomcat.keystore"
      keystorePass="changeit" />
    3. 명령행 창에서 다음 명령을 실행하십시오.
      keytool -v -list -keystore keyStoreFileName
      keyStoreFileNameserver.xml 파일에서 keystoreFile 속성의 이름을 사용하십시오. 명령에서 비밀번호를 입력하도록 프롬프트하면 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
      jreLocation의 JRE 또는 JDK 위치를 사용하십시오.
이제 이 JRE 또는 JDK를 사용하는 일부 도구가 서버 인증서를 승인합니다. curl 등의 기타 도구는 승인되지 않았다는 이유로 여전히 서버 인증서를 승인하지 않을 수 있습니다. 이 문제점을 해결하려면 서버에 대해 서명된 인증서를 설정하십시오.

피드백