簡體   English   中英

是否可以從jaas.conf中的類路徑引用keytab?

[英]Is it possible to reference a keytab from the classpath in jaas.conf?

是否可以從jaas.conf中的類路徑引用keytab?

我已經嘗試了以下方法,但似乎無濟於事:

Client{
keyTab=classpath: /mykeytab.keytab
}

Client{
keyTab=file: /mykeytab.keytab
}

Client{
keyTab=file: resources/mykeytab.keytab
}

據我所知,除了jaas.conf文件中的keytab的絕對路徑外,無法使用其他任何東西。

Krb5LoginModule.java ,可以看到(例如,從github.com的Krb5LoginModule.java中

if (useKeyTab) {
  ktab = (keyTabName == null)
           ? KeyTab.getInstance()
           : KeyTab.getInstance(new File(keyTabName));

.getInstance()代碼將在實例化的File對象上使用.getPath() (請參見KeyTab.java )。

因此,基本方法中沒有什么可以搜索類路徑。 另外,也請參閱此處有關keytab配置的問題

就是說,並且沒有在OP的配置文件中顯示,可以將類從通常的“ com.sun.security.authmodule.Krb5LoginModule”更改為自定義模塊。 然后,在此自定義模塊中,可以執行諸如在Krb5LoginModuleinitialize方法中使用的Map<String,?>參數中設置條目之類的Krb5LoginModule

我們已經實現了這種方法,以允許在客戶端應用程序中定義各種設置,而不是試圖讓用戶在客戶端上編輯jaas.conf文件。 因此,我們使用一個自定義模塊,該模塊使用Composition方法封裝了Krb5LoginModule, but sets all of the desired options into the Map`。

就像這樣:

Map<String, String> mOpts = new HashMap<>(); // options

mOpts.put("doNotPrompt", Boolean.TRUE.toString());
mOpts.put("useTicketCache", Boolean.FALSE.toString());
mOpts.put("useKeyTab", Boolean.TRUE.toString());
mOpts.put("keyTab", options.getKeytabPath().toString());
mOpts.put("principal", PrincipalUtils.getDefaultPrincipal().getName());

krb5LM.initialize(_subject, options.getCallbackHandler(), mSS, mOpts);

//
// attempt to authenticate the user
//
krb5LM.login();

可以在類路徑中搜索所需的文件名,然后將找到的文件傳遞給Map 在上面的准示例中, options對象已從用戶的首options中拉出了keytab並對其進行了驗證。 但是,可以擁有一個對類路徑的搜索,而不是擁有一個特定的預瀏覽文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM