Использование SSPI для получения единого входа из приложения Java, работающего в Windows - PullRequest
3 голосов
/ 27 августа 2010

У меня есть приложение Java, работающее в Windows, которое должно пройти аутентификацию в веб-приложении, используя Kerberos / SPNEGO. Я знаю, как настроить JAAS для достижения этой цели, но я считаю, что в реализации Java (JDK6 и JDK7beta) Kerberos отсутствуют пара важных функций, которые мне нужны. Например, поддержка рефералов или использование DNS для определения области хоста (у меня есть среда нескольких областей).

Есть ли сторонний модуль, который может осуществлять аутентификацию с использованием родной системы Windows SSPI ? Мы уже прошли через настройку наших клиентов Windows для работы в нашей среде, было бы хорошо, если бы не пришлось делать это снова для Java. Мне известно о Waffle и его модуле WindowsLoginModule, но, похоже, он не выполняет единый вход, поскольку требует от пользователей повторного ввода учетных данных в приложение.

1 Ответ

3 голосов
/ 17 августа 2012

У нас была похожая проблема.Основная проблема для нас заключалась в том, что реализация GSS-API не работает при использовании Windows UAC, и мы решили ее с помощью Waffle.

Waffle - это, в основном, оболочка для вызовов JNA в SSPI.Нам удалось реализовать SSO с использованием Waffle, переопределив класс sun.net.www.protocol.http.NegotiatorImpl:

package sun.net.www.protocol.http;

import java.io.IOException;
import waffle.windows.auth.impl.WindowsSecurityContextImpl;

public class NegotiatorImpl extends Negotiator {

private String serviceName;

public NegotiatorImpl(HttpCallerInfo hci) throws IOException {
    this.serviceName = "HTTP/" + hci.host.toLowerCase();
}

    @Override
    public byte[] firstToken() throws IOException {
        return WindowsSecurityContextImpl.getCurrent("Negotiate", serviceName).getToken();
    }

    @Override
    public byte[] nextToken(byte[] in) throws IOException {
        return new byte[0];
    }
}

Затем вы можете создать JAR-файл с удержанием только этого класса и скопировать его вместе с JAR-файлами Waffle & JNA в . / jre / lib / одобрил вашей JVM.Используя Java одобренный механизм переопределения стандартов JVM, он заменяет реализацию JVM по умолчанию Negotiator.

...