Hadoop HDFS通过HTTP访问 - 使用HTTP工具

安全

开箱即用的HttpFS同时支持伪认证和Kerberos HTTP SPNEGO认证。

伪认证

使用伪认证时,用户名必须在HttpFS URL的查询字符串参数user.name=中指定。例如:

$ curl "http://<HTTFS_HOST>:14000/webhdfs/v1?op=homedir&user.name=babu"

Kerberos HTTP SPNEGO认证

Kerberos HTTP SPNEGO认证需要一个支持Kerberos HTTP SPNEGO协议的工具或库。

重要提示:如果使用curl,所使用的curl版本必须支持GSS(如果支持,curl -V会输出'GSS')。

例如:

$ kinit
Please enter the password for user@LOCALHOST:
$ curl --negotiate -u foo "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir"
Enter host password for user 'foo':

注意:-u USER选项是--negotiate所必需的,但实际上并未使用。可以为USER指定任意值,当提示输入密码时直接按[ENTER]键即可,因为密码值会被忽略。

记住我是谁(建立认证会话)

与大多数认证机制类似,Hadoop HTTP认证会对用户进行一次身份验证,并颁发一个短期有效的认证令牌用于后续请求。该认证令牌是一个经过签名的HTTP Cookie。

在使用类似curl的工具时,认证令牌必须存储在首次进行认证的请求中,并在后续请求中提交。要通过curl实现这一点,必须使用-b-c选项来保存和发送HTTP Cookies。

例如,第一个执行身份验证的请求应当保存接收到的HTTP Cookies。

使用伪认证:

$ curl -c ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir&user.name=foo"

使用Kerberos HTTP SPNEGO认证:

$ curl --negotiate -u foo -c ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir"

然后,后续请求会转发之前收到的HTTP Cookie:

$ curl -b ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=liststatus"