开箱即用的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协议的工具或库。
重要提示:如果使用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"