2011-02-08 4 views
1

Я пытаюсь создать веб-приложение с использованием клиентских ключей для аутентификации клиентов. Я думаю, что я выяснил всю проблему доверия, чтобы я мог заставить клиента фактически пройти проверку подлинности. Однако я не хочу требовать авторизации клиента. Я просто хочу проверить его и включить функции, если он включен.Проверка подлинности доверенного сервера Jetty с помощью SSL client-auth

Я могу использовать .wantClientAuth, который запросит его, но разрешить соединение, если оно не существует. Но я не могу найти какое-либо свойство, чтобы узнать, был ли запрос аутентифицирован.

Это должно существовать, в противном случае цель is wantClientAuth. Как его использовать?

+0

Ни один из этих двух методов не работал. Я все еще не активно работаю над проблемой, потому что мне удалось найти обходное решение, которое включает отправку санкционированной связи с клиентом по отдельному каналу. И я могу продолжать использовать это решение. – Arelius

ответ

0

У меня нет установка работает здесь, чтобы проверить это прямо сейчас, но не request.getUserPrincipal() и request.getAuthType() дать вам то, что вы хотите.

См http://www.docjar.com/docs/api/javax/servlet/http/HttpServletRequest.html

(Это предполагает, что у вас есть доступ к запросу сервлета в контексте, в котором вы работаете)

+0

У меня есть запрос на сервер. Проблема в том, что они оба возвращают нуль. – Arelius

0

Если вы используете использовать сервлет API метод Тима. Вот некоторые другие идеи, зависящие от вашего контекста вызова.

После того, как рукопожатие завершено, вы можете вызвать getCertChain на SSLSession. Если он равен нулю, клиент не аутентифицируется с сертификатом клиента.

Смотрите метод подгоняем здесь:

http://www.javadocexamples.com/java_source/org/mortbay/jetty/security/SslSocketConnector.java.html

В качестве альтернативы вы могли бы назвать getLocalPrincipal или getLocalCertificates на HttpsURLConnection. Если они равны нулю, то нет сертификата клиента.

Смежные вопросы