Hadoop Auth, Java HTTP SPNEGO - 예제

Hadoop Auth, Java HTTP SPNEGO - 예제

Hadoop Auth로 보호되는 URL에 브라우저, curl, Java 클라이언트로 접근하는 방법과 예제를 빌드·실행하는 방법을 다루는 문서예요.

출처: 문서

본문

브라우저로 Hadoop Auth 보호 URL 접근하기 (Accessing a Hadoop Auth protected URL Using a browser)

중요: 브라우저는 HTTP Kerberos SPNEGO를 지원해야 해요. 예를 들어 Firefox나 Internet Explorer예요.

Firefox의 경우 about:config 페이지를 로드해 저수준 설정 페이지에 접근해요. 그런 다음 network.negotiate-auth.trusted-uris 기본 설정으로 이동해 HTTP Kerberos SPNEGO로 보호되는 웹 서버의 호스트 이름이나 도메인을 추가해요 (여러 도메인과 호스트 이름을 사용한다면 쉼표로 구분).

curl로 Hadoop Auth 보호 URL 접근하기 (Accessing a Hadoop Auth protected URL Using curl)

중요: curl 버전이 GSS를 지원해야 해요. curl -V로 확인하세요.

$ curl -V
curl 7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
Protocols: tftp ftp telnet dict ldap http file https ftps
Features: GSS-Negotiate IPv6 Largefile NTLM SSL libz

kinit로 KDC에 로그인한 뒤 curl로 보호된 URL을 가져와요:

$ kinit
Please enter the password for tucu@LOCALHOST:

$ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://$(hostname -f):8080/hadoop-auth-examples/kerberos/who
Enter host password for user 'tucu':

Hello Hadoop Auth Examples!
  • --negotiate 옵션은 curl에서 SPNEGO를 활성화해요.
  • -u : 옵션은 필수지만 사용자는 무시돼요 (kinit된 principal이 사용돼요).
  • -b와 -c는 HTTP Cookie를 저장하고 전송하는 데 사용돼요.

Java 클라이언트 사용하기 (Using the Java Client)

AuthenticatedURL 클래스를 사용해 인증된 HTTP 연결을 얻어요:

URL url = new URL("http://localhost:8080/hadoop-auth/kerberos/who");
AuthenticatedURL.Token token = new AuthenticatedURL.Token();
...
HttpURLConnection conn = new AuthenticatedURL().openConnection(url, token);
...
conn = new AuthenticatedURL().openConnection(url, token);
...

예제 빌드·실행하기 (Building and Running the Examples)

Hadoop-Auth의 소스 코드를 다운로드하면 예제는 src/main/examples 디렉터리에 있어요.

서버 예제 (Server Example)

  1. hadoop-auth-examples/src/main/webapp/WEB-INF/web.xml을 편집하고, Kerberos용으로 구성된 AuthenticationFilter 정의에 올바른 설정 초기 파라미터(올바른 Kerberos principal과 keytab 파일)를 설정해요. 자세한 내용은 Configuration 문서를 참고하세요.
  2. mvn package 명령으로 웹 애플리케이션 WAR 파일을 만들어요.
  3. WAR 파일을 서블릿 컨테이너에 배포해요. 예를 들어 Tomcat을 사용한다면 WAR 파일을 Tomcat의 webapps/ 디렉터리에 복사해요.
  4. 서블릿 컨테이너를 시작해요.

curl로 서버 접근하기 (Accessing the server using curl)

curl로 보호된 리소스에 접근해 보세요. 보호된 리소스는 다음과 같아요:

$ kinit
Please enter the password for tucu@LOCALHOST:

$ curl http://localhost:8080/hadoop-auth-examples/anonymous/who

$ curl http://localhost:8080/hadoop-auth-examples/simple/who?user.name=foo

$ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://$(hostname -f):8080/hadoop-auth-examples/kerberos/who

Java 클라이언트 예제로 서버 접근하기 (Accessing the server using the Java client example)

$ kinit
Please enter the password for tucu@LOCALHOST:

$ cd examples

$ mvn exec:java -Durl=http://localhost:8080/hadoop-auth-examples/kerberos/who

....
Token value: "u=tucu,p=tucu@LOCALHOST,t=kerberos,e=1295305313146,s=sVZ1mpSnC5TKhZQE3QLN5p2DWBo="
Status code: 200 OK
You are: user[tucu] principal[tucu@LOCALHOST]
....

더 알아보기 (Learn more)