MRS安全集群问题解决:配置了java.security.auth.login.config却还是加载不到jaas

举报
breakDawn 发表于 2020/09/29 17:46:26 2020/09/29
【摘要】 今天用flink测试1个beam程序包, 里面要做1个认证的操作, 认证操作通过部门内部的认证组件包实现。但是发现认证失败, 异常提示"jass DLFClient not exist"。 DlfClient是我们定义的一个module。§ 分析过程这显然是没正确加载到jaas文件, jaas文件里是有DLFClient这个moudle的:用远程调式跟踪了下,发现认证前是有做配置java....

今天用flink测试1个beam程序包, 里面要做1个认证的操作, 认证操作通过部门内部的认证组件包实现。

但是发现认证失败, 异常提示"jass DLFClient not exist"。  DlfClient是我们定义的一个module。

§ 分析过程

这显然是没正确加载到jaas文件, jaas文件里是有DLFClient这个moudle的:
image.png

用远程调式跟踪了下,发现认证前是有做配置java.security.auth.login.config,并把jaas文件的路径放入,jaas路径名也是正确的:
image.png

接着跟踪到了报异常的地方:
image.png

这里是调用了getConfiguration,取出里面的entry, 但是这里的entry是空的

看了下内容,没有DLFClient这个moudle,但configuration却包含了Client和KafkaClient:
image.png

再看了下里面Client的keytabPath内容,可以发现为我配置Flink客户端时的输入的login-context内容
image.png

也就是说,即使我配置了java.security.auth.login.config, 但依然没用, 我需要明白java.security.auth.login.config里所配置的文件是何时使用的。

重新走了一遍源代码,发现问题在于javax.security.auth.login.Configuration.getConfiguration()里,这是里面的源码:
image.png

可以看到如果confiuration不为null了,就不会更新configuartion了。
而Flink每次提交任务时,在进入自己写的main函数前,会先调用一次getConfiguration,导致后续不再更新getConfiguration。

§ 原因总结

如果出现"配置了java.security.auth.login.config却还是加载不到jaas文件内容的问题", 很可能是因为在set该Property之前, 已经有其他地方通过调用javax.security.auth.login.Configuration.getConfiguration(), 将config配置进行了更新,并使之后不再变化。

§ 解决方案:

尽量保证Client们来自同一份jass配置, 我通过在flink-conf.yaml中加入对应context解决。
image.png


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。