当前位置: 首页 > 知识库问答 >
问题:

JavaHadoop Kerberize群集的Http请求

居晗日
2023-03-14

我需要发送Http请求到Hadoop群集与Kerberos授权,我想与Keytab进行身份验证。我发现一个库HttpClient的Apache和我写了这个代码来获得HttpClient:

    private static CloseableHttpClient getHttpClient() {
    CredentialsProvider provider = new BasicCredentialsProvider();
    provider.setCredentials(
            AuthScope.ANY,
            new UsernamePasswordCredentials("YarnManager", "YarnManager")
    );
    return HttpClientBuilder.create()
            .setDefaultCredentialsProvider(provider)
            .build();
}

但我只能在对KeyTab执行Kinit命令后进行身份验证。如何在httpclient中传递密钥表的路径?你知道其他图书馆也能做到这一点吗?

共有2个答案

祁驰
2023-03-14

我最近实现了一个类似的东西,但是它不是Java,而是在C.

没有直截了当的办法来解决这个问题。执行kinit是用户的责任。

蒋硕
2023-03-14

关于ApacheHttpClient:引用SteveLoughran的Hadoop和Kerberos,《门外的疯狂》(从他必须维护Hadoop auth库时开始)

ApacheHTTP客户机/HTTP组件因其是处理远程HTTP服务器的优秀库而享有当之无愧的声誉
您是否应该将它们用于Kerberos/SPNEGO身份验证的应用程序?

编号:
(…)<不要浪费时间或让事情变得更糟:使用JDK库

关于Kerberos-auth-over-HTTP:标准是使用SPNego,它由任何语言的每个体面的HTTP客户机实现。通过任何严肃的HTTP服务器或代理,尽管服务器端的设置更加复杂。

Java客户端的问题在于,再次引用Steve Lougran的话,

公共JavaAPI在不同版本和JDK之间都很脆弱。。。Java版本中的发布可能会破坏内部和/或公共API的行为。

这可能解释了为什么“本地”JavaHTTP客户端比Apache客户端更健壮,当涉及到Kerberos的Java实现时,即JAAS--如果您希望能够使用keytab,这就是您需要配置的。

现在,Kerberos的Java实现不仅脆弱,而且不完整(无法写入票证缓存,无法创建可更新的票证,等等),而且没有很好的文档记录——再次引用s.L

JAAS是企业JavaBean时代的噩梦,它从深处浮出水面,把粗心的人拉到
(...)
一个jaas.conf文件可以有多个上下文...不同的上下文可以有不同的登录/授权机制,包括Kerberos和LDAP

有趣的事实:实际上,一个上下文可以定义多个机制(尝试第一个条目,如果尝试第二个条目不成功,等等)——对于每个机制,都有多种获取凭据的方法。有关语法,请参见这些帖子

您将需要覆盖它,从一个键表创建一个私有的、内存中的票证;还需要一些没有很好的文档记录的调整——例如,参见那篇文章
https://stackoverflow.com/a/42506620/5162372

上面的帖子关注JDBC,但也适用于SPNego,有两个警告:

  • JAAS部分必须标记为com.sun.security.jgss.krb5.initiate
  • 有一个额外的调试标志-Dsun.security.spnego.debug=true

此外,来自Oracle的"教程"不包括keytab选项,但可能对上下文有用:
https://docs.oracle.com/javase/8/docs/technotes/guides/security/jgss/lab/part6.html

 类似资料:
  • SRS支持HTTP FLV直播流集群分发,详细参考HTTP FLV SRS的HTTP FLV边缘只能使用单进程,如何做到多进程呢?可以使用HTTP反向代理,SRS提供了go-sharp,支持根据SRS边缘的负载均衡以及心跳检测。参考:go-sharp 本例子部署了三个SRS,侦听不同的端口(实际可以部署到不同的机器,侦听同一个端口),一个作为Origin源站,两个作为Edge边缘。推RTMP流到源

  • 问题内容: 我对SQL(Server2008)的较低层次的了解是有限的,现在我们的DBA对此提出了挑战。让我解释一下这种情况:(我已经提到一些明显的陈述,希望我是对的,但是如果您发现有问题,请告诉我)。 我们有一张桌子,上面放着人们的“法院命令”。创建表(名称:CourtOrder)时,我的创建方式如下: 然后,我将非聚集索引应用于主键(以提高效率)。我的理由是,这是一个唯一字段(主键),应该像我

  • Cluster Cluster.EdsClusterConfig Cluster.OutlierDetection Cluster.LbSubsetConfig Cluster.LbSubsetConfig.LbSubsetSelector Cluster.LbSubsetConfig.LbSubsetFallbackPolicy (Enum) Cluster.RingHashLbConfig C

  • 一、负载均衡 负载均衡算法 转发实现 二、集群下的 Session 管理 Sticky Session Session Replication Session Server 一、负载均衡 集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点。 负载均衡器会根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。 负载均衡器可以用来实现高可用以及伸缩性: 高可用:当某个节点故障

  • 集群为一组LBAgent转发节点的集合。 负载均衡集群是一组转发节点LBAgent的集合,一般情况下一个集群下配置两个LBAgent节点互为主备即可,同一集群下的LBAgent节点的VRRP路由ID必须相同。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “网络/负载均衡集群/集群” 菜单项,进入集群页面。 创建集群 该功能用于创建负载均衡集群。 单击列表上方 “新建” 按钮,弹出

  • 帮助用户快速搭建Kubernetes集群。 云管平台支持创建和纳管Kubernetes集群,目前支持以下纳管集群的方式。 基于 云联壹云 、Aliyun、AWS 平台的虚拟机创建 Kubernetes 集群。 导入已创建的集群,支持纳管 Kubernetes 集群和 OpenShift 集群。 Kubernetes集群是容器运行所需要的云资源的集合。一个Kubernetes集群由1~3个控制节点和