如何在Hadoop WebHDFS中启用OAuth2

时间:2017-11-29 22:55:06

标签: java hadoop authentication oauth webhdfs

我正在运行Hadoop ver 2.8.2并且正在尝试为WebHDFS客户端应用程序配置OAuth 2客户端凭据授权流程。我遵循了此处记录的指导:WebHDFS REST API。进入此页面后,搜索OAuth2以查找有关为WebHDFS配置OAuth 2的部分。

以下是我添加到hdfs-site.xml的OAuth 2属性:

  <!-- OAuth2 properties -->
  <property>
    <name>dfs.webhdfs.oauth2.enabled</name>
    <value>true</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.access.token.provider</name>
    <value>org.apache.hadoop.hdfs.web.oauth2.ConfCredentialBasedAccessTokenProvider</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.client.id</name>
    <value>webHdfsClient</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.credential</name>
    <value>secret</value>
  </property>
  <property>
    <name>dfs.webhdfs.oauth2.refresh.url</name>
    <value>https://<hostname:port of OAuth 2 token endpoint></value>
  </property>

我的core-site.xml是我认为可能与OAuth2配置相关的属性:

  <property>
    <name>hadoop.http.authentication.simple.anonymous.allowed</name>
    <value>false</value>
  </property>
  <property>
    <name>hadoop.http.authentication.type</name>
    <value>simple</value>
  </property>

我认为,或许是错误的,不应该允许匿名身份验证。根据文档,使用&#34;简单&#34;在首次通过Web控制台访问WebHDFS时,要求将user.name = 用户名作为查询字符串参数包含在内。我不认为使用简单与OAuth到WebHDFS的客户端应用程序身份验证有任何关系,但我想如果它确实起作用,我应该提一下。

然后我创建了一个Java客户端应用程序来访问WebHDFS端点。我已为SSL配置了WebHDFS,以便WebHDFS端点和令牌管理服务器都使用HTTPS协议进行侦听。

以下是我编写的用于访问WebHDFS端点(hdserver.local)根目录的小型Java应用程序的主要方法:

public static void main(String[] args) throws IOException {
    Configuration conf = new Configuration();
    conf.set("fs.defaultFS","swebhdfs://hdserver.local:44305");
    FileSystem fs = FileSystem.get(conf);

    FileStatus[] fsStatus = fs.listStatus(new Path("/"));

    for(int i = 0; i < fsStatus.length; i++) {
        System.out.println(fsStatus[i].getPath().toString());
    }
}

这正确地返回,而不需要从我的令牌端点检索承载令牌并将其发送到WebHDFS进行身份验证。我希望通话失败,告诉我我的电话没有被授权或者没有带有请求的持票人令牌。请告诉我哪里出错了。

1 个答案:

答案 0 :(得分:0)

hadoop.http.authentication.type和hadoop.http.authentication.simple.anonymous.allowed配置仅与web consoles of Hadoop(JobTracker,NameNode等)相关。 WebHDFS,即使它超过http,也与这些设置不正交。是的,这很令人困惑。

其他设置显示正确。您是否能够在NameNode日志中看到oauth2配置生效?