Единый вход с клиентом Java - PullRequest
0 голосов
/ 11 мая 2018

Я ищу аутентификацию единого входа в клиенте Java.

Поскольку я вошел в Windows с помощью AD, главная цель состоит в том, чтобы мне больше не приходилось вводить имя пользователя и пароль,Я хочу, чтобы Java использовала Билет, полученный при входе в Windows.Этот код - лучший, который у меня есть для этой цели:

LoginContext lc = new LoginContext("com.sun.security.jgss.krb5.initiate", new DialogCallbackHandler());
lc.login();
Subject.doAs(lc.getSubject(), (PrivilegedExceptionAction<Void>) () -> {
            System.out.println("This is privileged");
            return null;
        });

Я установил свойства java.security.krb5.conf и java.security.auth.login.config с соответствующими conf-файлами, но все равно появляется диалоговое окно с запросом имени пользователя и пароля..

Я также пытался работать с GSSName, но GSSManager.createCredential() также запрашивает имя пользователя и пароль (возможно, используя TextCallbackHandler()).

Я пытался ладить с Waffle , но не получилось.Большинство примеров и объяснений относятся к стороне сервера (я нашел только один пример, объединяющий сторону сервера и клиента, но я не смог разделить его).

Я знаю, что есть похожие вопросы (например, this ), но у меня не получилось работать без ввода пароля.

PS: я знаю, что DialogCallbackHandler ограничен, я использую его только для целей тестирования.

1 Ответ

0 голосов
/ 23 мая 2018

Хорошо, после нескольких попыток я нашел решение. Проблема была не в коде, а в реестре. Как указано на этой странице, начиная с Java 7 Вы не можете получить доступ к билетам Windows изначально. Чтобы изменить это, вам необходимо установить дополнительный раздел реестра. Для этого зайдите в папку реестра

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters

и добавьте ключ

Value Name: AllowTgtSessionKey
Value Type: REG_DWORD
Value: 0x01

Чтобы полностью выполнить эту работу, вам понадобятся некоторые дополнительные настройки:

Файл конфигурации jaas

В файле конфигурации jaas вы должны указать, какие модули безопасности должен использовать jaas. Часть перед скобками называет вашу конфигурацию. Если вы используете библиотеки GSS, вы должны назвать это com.sun.security.jgss.krb5.initiate. Когда вы используете LoginContext, вы просто передаете имя конфигурации в качестве первого параметра. Мой jaas.conf выглядит следующим образом:

com.sun.security.jgss.krb5.initiate {
    com.sun.security.auth.module.Krb5LoginModule required
        useTicketCache = true;
 };

Конфигурация Kerberos

Вам также потребуется конфигурация для модуля Kerberos. Это в основном содержит адрес области, но может содержать дополнительную информацию. Минимальный рабочий пример:

[realms]
    YOUR.REALM.COM = {
        kdc = your.realm.com:88
        default_domain = REALM.COM
    }

Обратите внимание, что это чувствительно к регистру!

Свойства системы

Наконец, вам нужно настроить Java, чтобы найти эти файлы. Это можно сделать, задав свойства при запуске или позвонив по номеру System.setProperty():

System.setProperty("java.security.krb5.conf", "src/resources/krb5.conf");
System.setProperty("java.security.auth.login.config", "src/resources/jaas.conf");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...