Hadoop 身份验证、Java HTTP SPNEGO - 示例

使用浏览器访问 Hadoop 身份验证保护的 URL

重要提示:浏览器必须支持 HTTP Kerberos SPNEGO。例如,Firefox 或 Internet Explorer。

对于 Firefox,通过加载 about:config 页面访问低级别配置页面。然后转到 network.negotiate-auth.trusted-uris 首选项,并添加 HTTP Kerberos SPNEGO 保护的 Web 服务器的主机名或域(如果使用多个域和主机名,请使用逗号分隔)。

使用 curl 访问 Hadoop 身份验证保护的 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("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);
...

构建和运行示例

下载 Hadoop-Auth 的源代码,示例位于 src/main/examples 目录中。

服务器示例

编辑 hadoop-auth-examples/src/main/webapp/WEB-INF/web.xml 并为针对 Kerberos 配置的 AuthenticationFilter 定义设置正确的配置初始化参数(必须指定正确的 Kerberos 主体和密钥表文件)。有关详细信息,请参阅 配置文档

通过运行 mvn package 命令创建 Web 应用程序 WAR 文件。

在 servlet 容器中部署 WAR 文件。例如,如果使用 Tomcat,请将 WAR 文件复制到 Tomcat 的 webapps/ 目录中。

启动 servlet 容器。

使用 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 客户端示例访问服务器

$ 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]

....