[英]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”更改為自定義模塊。 然后,在此自定義模塊中,可以執行諸如在Krb5LoginModule
的initialize
方法中使用的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.