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