java - 如何在 Hadoop WebHDFS 中启用 OAuth2

标签 java hadoop authentication oauth webhdfs

我正在运行 Hadoop 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>

我认为,也许是错误的,不应该允许匿名身份验证。根据文档,使用“simple”需要在第一次通过 Web 控制台访问 WebHDFS 时将 user.name=username 作为查询字符串参数包含在内。我认为使用 simple 与通过 OAuth 到 WebHDFS 的客户端应用程序身份验证没有任何关系,但我认为如果它确实起作用,我应该提及它。

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

这是我编写的一个小型 Java 应用程序的主要方法,用于访问我的 WebHDFS 端点 (hdserver.local) 的根目录:
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());
    }
}

这会正确返回,而无需我从 token 端点检索承载 token 并将其发送到 WebHDFS 进行身份验证。我预计调用会失败,告诉我我的调用未获得授权或请求中缺少不记名 token 。请告诉我哪里出错了。

最佳答案

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

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

关于java - 如何在 Hadoop WebHDFS 中启用 OAuth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47563225/

相关文章:

Java 版本的 mongo 查询,用于从数组中检索唯一字符串以及计数

javascript - 无法通过 TLS 连接到 Websocket 服务器

hadoop - 使用 HIVE 减少映射

java - 我可以运行 Hadoop onflow (在应用程序运行时运行 Map Reduce)

node.js - 注销没有 req 对象的用户 Passport js

java - 如何编码 "if input != a number, then..."

java - 无法解析符号 hbase

hadoop - zookeeper.znode.parent 不匹配异常

typescript - 下一步授权 : Multiple users for one account

java - ZooKeeper 摘要式身份验证 - 安全替代方案?