Доступ к веб-сайту SharePoint из приложения Java с аутентификацией Kerberos
Я пытаюсь получить доступ к веб-сайту SharePoint из приложения Java. Сервер SharePoint предпочитает проверку подлинности Kerberos. Не могли бы вы привести пример реализации аутентификации Kerberos?
Ответов (3)3
Что касается настройки Kerberos, я знаю трех человек, которые знают все, что нужно знать о Curb: Спенс Харбар, Боб Фокс и Том Висновски.
Спенс также разрабатывает мастер Kerberos для настройки Curb и экспорта сценариев установки.
Посмотрите его блог здесь: http://www.harbar.net/
Том Визновски разослал технический документ. http: //my/sites/tomwis/Shared%20Documents/Configuring%20Kerberos%20for%20SharePoint.docx
У Джоэла Олсона есть хорошая статья: http://www.sharepointjoel.com/Lists/Posts/Post.aspx?ID=2
Но когда сказано выше, SharePoint рекомендует Curb только тогда, когда компания уже использует это. Вам не следует устанавливать Kerberos в сети вашей компании только из-за SharePoint. Kerberos сложно настроить, и хотя он обычно считается более быстрым, чем NTLM, это верно только тогда, когда вы достигаете определенного предела одновременных пользователей на вашем сайте. Для сайта с низким трафиком огромные токены, которые Kerberos отправляет по сети, фактически делают его медленнее, чем NTLM.
Конечно, есть некоторые функции, которые будут работать только с Kerberos (RSS-канал, кубы в службах Excel, аутентификация вызовов веб-служб в пользовательском коде из-за двойных переходов), но поверьте мне, когда я скажу, что NTLM очень хорошо справится с работой вашего МОСС тоже.
Когда сказано выше, не могли бы вы указать, какой интеграции вы пытаетесь достичь с помощью своего Java-приложения?
Вы просто пытаетесь вызвать уровни веб-сервисов SharePoint?
hth Андерс Раск
Поэтому, чтобы помочь вам немного расширить область поиска ответов, здесь нет ничего специфичного для SharePoint в используемой здесь аутентификации Kerberos. На самом деле в SharePoint нет собственных механизмов аутентификации (по крайней мере, если мы говорим здесь о WSS 3 / MOSS). Он просто полагается на базовые возможности аутентификации ASP.NET/IIS.
Так вот, если вы запускаете Java на современном JDK, вам, вероятно, будет легко. См. Документацию о механизмах аутентификации HTTP . Там есть несколько хороших фрагментов кода. Один из них я воспроизведу здесь для справки. На самом деле, посмотрите ссылку.
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
public class RunHttpSpnego {
static final String kuser = "username"; // your account name
static final String kpass = "password"; // your password for the account
static class MyAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
// I haven't checked getRequestingScheme() here, since for NTLM
// and Negotiate, the usrname and password are all the same.
System.err.println("Feeding username and password for " + getRequestingScheme());
return (new PasswordAuthentication(kuser, kpass.toCharArray()));
}
}
public static void main(String[] args) throws Exception {
Authenticator.setDefault(new MyAuthenticator());
URL url = new URL(args[0]);
InputStream ins = url.openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String str;
while((str = reader.readLine()) != null)
System.out.println(str);
}
}
Вот пример из документации Java библиотеки SPNEGO HTTP Servlet Filter с открытым исходным кодом .
В библиотеке есть клиент, который может подключаться к веб-серверу, на котором включена встроенная проверка подлинности Windows.
В проекте также есть примеры того, как настроить вашу среду для аутентификации Kerberos / SPNEGO.
public static void main(final String[] args) throws Exception {
System.setProperty("java.security.krb5.conf", "krb5.conf");
System.setProperty("sun.security.krb5.debug", "true");
System.setProperty("java.security.auth.login.config", "login.conf");
SpnegoHttpURLConnection spnego = null;
try {
spnego = new SpnegoHttpURLConnection("spnego-client", "dfelix", "[email protected]");
spnego.connect(new URL("http://medusa:8080/index.jsp"));
System.out.println(spnego.getResponseCode());
} finally {
if (null != spnego) {
spnego.disconnect();
}
}
}