我有一個受Kerberos保護的羣集,並且有一個REST API需要代表用戶與羣集進行交互。我使用Spring Security和SPNEGO來驗證用戶,但是當我嘗試使用Hadoop SDK時,基於我嘗試的各種原因,它失敗了。轉發SPNEGO憑證以保護羣集
當我嘗試在用戶登錄後直接使用SDK時,它會給我SIMPLE authentication is not enabled
。
我注意到會話的Authenticator
是UserNamePasswordAuthenticationToken
這是沒有意義的,因爲我使用用戶憑證對Kerberos領域進行身份驗證。
我想用這個項目的開箱即用我自己的服務帳戶和密鑰表:https://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-spnego-form-auth
當使用「Hadoop SDK」時,我想你會創建一個Hadoop的'Configuration'和一個Hadoop'UserGroupInformation'。如何將配置屬性以隱式的方式提供給'Configuration'(即,將''core-site.xml'等放在本地目錄中,並將該目錄添加到CLASSPATH中)*或顯式地提供給配置屬性?如果是隱式的,你是否檢查文件是否被實際讀取*(否則Hadoop默默恢復爲硬編碼的默認值,例如SIMPLE認證,並且你的程序將在隨後發生意外的異常消息時崩潰並燒錄)*? –
如果還不是這種情況,可以按照https://steveloughran.gitbooks.io/kerberos_and_hadoop/content/sections/secrets.html中的說明提升一些調試標誌,例如'-Dsun.security.krb5。debug = true'和'export HADOOP_JAAS_DEBUG = true' –
我正在顯式地添加配置文件,但我試圖避免使用UGI,因爲它全部使用靜態成員,而且我需要支持線程安全操作。我可能對於在用戶的主體下工作的所有東西都有一個基本的誤解,但我希望它能像獲得對一個'Subject「的引用並在'Subject內部運行我的HDFS列表等一樣簡單.doAs' – Benny