Hadoop Auth, Java HTTP SPNEGO - 例

ブラウザを使用してHadoop Authで保護されたURLにアクセスする

重要: ブラウザはHTTP Kerberos SPNEGOをサポートしている必要があります。たとえば、FirefoxやInternet Explorerなどです。

Firefoxの場合、about:configページをロードして低レベル構成ページにアクセスします。次に、network.negotiate-auth.trusted-uris設定に移動し、HTTP Kerberos SPNEGOで保護されているWebサーバーのホスト名またはドメインを追加します(複数のドメインとホスト名を使用する場合は、カンマで区切ります)。

curlを使用してHadoop Authで保護されたURLにアクセスする

重要: 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されたプリンシパルが使用されます)。

  • -b-cは、HTTP Cookieを保存および送信するために使用されます。

Javaクライアントの使用

AuthenticatedURLクラスを使用して、認証されたHTTP接続を取得します

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

例のビルドと実行

Hadoop-Authのソースコードをダウンロードします。例はsrc/main/examplesディレクトリにあります。

サーバーの例

hadoop-auth-examples/src/main/webapp/WEB-INF/web.xmlを編集し、Kerberos用に構成されたAuthenticationFilter定義の適切な構成初期化パラメーターを設定します(適切なKerberosプリンシパルとkeytabファイルを指定する必要があります)。詳細については、構成ドキュメントを参照してください。

mvn packageコマンドを実行して、WebアプリケーションWARファイルを作成します。

WARファイルをサーブレットコンテナにデプロイします。たとえば、Tomcatを使用している場合は、WARファイルをTomcatのwebapps/ディレクトリにコピーします。

サーブレットコンテナを起動します。

curlを使用してサーバーにアクセスする

curlを使用して、保護されたリソースへのアクセスを試みます。保護されたリソースは次のとおりです。

$ kinit
Please enter the password for tucu@LOCALHOST:

$ curl https://127.0.0.1:8080/hadoop-auth-examples/anonymous/who

$ curl https://127.0.0.1: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クライアントの例を使用してサーバーにアクセスする

$ kinit
Please enter the password for tucu@LOCALHOST:

$ cd examples

$ mvn exec:java -Durl=https://127.0.0.1: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]

....