Можно ли ссылаться на таблицу ключей из classpath в jaas.conf? - PullRequest
0 голосов
/ 25 июня 2018

Можно ли ссылаться на таблицу ключей из classpath в jaas.conf?

Я пробовал следующее, но, похоже, ничего не работает:

Client{
keyTab=classpath: /mykeytab.keytab
}

Client{
keyTab=file: /mykeytab.keytab
}

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

1 Ответ

0 голосов
/ 25 июня 2018

Насколько я знаю, невозможно использовать что-либо, кроме абсолютного пути к таблице ключей в файле jaas.conf.

В Krb5LoginModule.java каждый видит (например, Krb5LoginModule.java на github.com )

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

И код .getInstance() будет использовать.getPath() для экземпляра File объекта (см. KeyTab.java ).

Следовательно, в базовом подходе нет ничего, что будет искать путь к классам.Также, смотрите этот вопрос здесь о настройке keytab * .

Тем не менее, и не показанный в файле конфигурации OP, можно изменить класс с обычного "com.sun"..security.authmodule.Krb5LoginModule "в пользовательский модуль.В этом пользовательском модуле можно выполнять такие действия, как установка записей в параметре Map<String,?>, который используется в методе initialize 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 извлек таблицу ключей из настроек пользователя и проверил ее.Но вместо того, чтобы иметь определенный предварительно просматриваемый файл, можно реализовать поиск по пути к классам.

...