开箱即用的 HttpFS 支持伪身份验证和 Kerberos HTTP SPNEGO 身份验证。
使用伪身份验证时,必须在 HttpFS URL 的 user.name=<USERNAME>
查询字符串参数中指定用户名。例如
$ 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':
注意:--negotiate
需要 -u USER
选项,但不会使用该选项。将任何值用作 USER
,并在系统要求输入密码时按 [ENTER],因为系统会忽略密码值。
与大多数身份验证机制一样,Hadoop HTTP 身份验证对用户进行身份验证一次,并颁发一个短期身份验证令牌,以便在后续请求中出示。此身份验证令牌是一个已签名的 HTTP Cookie。
在使用诸如 curl
之类的工具时,必须在执行身份验证的第一个请求中存储身份验证令牌,并在后续请求中提交该令牌。要使用 curl 执行此操作,必须使用 -b
和 -c
选项来保存和发送 HTTP Cookie。
例如,执行身份验证的第一个请求应保存收到的 HTTP Cookie。
使用伪身份验证
$ 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"