Вызов getUserPrincipal () в веб-сервисе возвращает ANONYMOUS - PullRequest
2 голосов
/ 22 июля 2010

Привет всем, я пытаюсь использовать простой SSL между моим веб-сервисом и клиентским приложением. Они оба работают в GlassFish 2.1.1 и находятся в отдельных доменах. Клиентское приложение само по себе является веб-приложением, и я должен добавить параметр JVM -Dcom.sun.enterprise.security.httpsOutboundKeyAlias ​​= s1as, чтобы заставить его отправлять свой сертификат веб-службам.

Я сделал импорт сертификатов в доверенные хранилища друг друга, и все это работает. Проблема в том, что мне нужно сделать некоторые вещи с сертификатом клиента в веб-службе, но вызов метода getUserPrincipal WebServiceContext, который я объявил ранее, всегда возвращает ANONYMOUS.

Почему он это делает и как я могу получить обратно то, что в сертификате.

редактирование: Думаю, я должен упомянуть, что я создал CA и создал новые закрытые ключи и сертификаты, которые были подписаны CA как для WS, так и для Клиента. Я добавляю закрытые ключи в их хранилища ключей, используя то же имя по умолчанию S1AS и новые подписанные сертификаты, а также сертификат CA в их хранилища доверия.

Я защищаю WS с помощью следующего правила в web.xml:

<security-constraint>
    <display-name>Constraint1</display-name>
    <web-resource-collection>
        <web-resource-name>Customer</web-resource-name>
        <description/>
        <url-pattern>/basecustomer*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <description/>
        <role-name>WSClient</role-name>
    </auth-constraint>
    <user-data-constraint>
        <description/>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<login-config>
    <auth-method>CLIENT-CERT</auth-method>
    <realm-name>certificate</realm-name>
</login-config>
<security-role>
    <description/>
    <role-name>WSClient</role-name>
</security-role>

И следующее в моем sun-web.xml:

<security-role-mapping>
    <role-name>WSClient</role-name>
    <group-name>WSClient</group-name>
</security-role-mapping>

И, наконец, в GlassFish под Конфигурацией -> Безопасность -> Области -> сертификат, который я сказал, чтобы назначить группу: WSClient

Ответы [ 3 ]

0 голосов
/ 10 августа 2010

Ух ты, мне пришлось перепроверить, что я не наткнулся на мой собственный вопрос по ошибке.

Возможно, я ошибаюсь, но у меня сложилось впечатление, что из-за вашей аутентификацииделается на уровне веб-сервера, уровень веб-службы не может этого достичь?В любом случае, мой метод решения моей проблемы показан здесь .Может быть, это поможет.

0 голосов
/ 30 января 2011

После того, как я не смог решить эту проблему, я буду ждать GlassFish 3.1, который добавляет дополнительные параметры аутентификации в область сертификатов, как описано Кумаром Джаянти здесь:это я могу обойти эту проблему.Я опубликую обновление, как только опробую его в финальной версии GlassFish 3.1.

0 голосов
/ 27 июля 2010

Похоже, вы не объявили имя пользователя для аутентификации, поэтому ANONYMOUS - правильный ответ.

getUserPrincipal () не читает сертификат для определения имени пользователя.

Если вам нужно получить сертификат для выполнения действий на основе его содержимого, вам нужно получить его другим способом.

Возможно, вы захотите прочитать эту статью о проверке подлинности клиента-сертификата для получения дополнительной информации и советов. Статья довольно старая, но концепции и механизмы не сильно изменились.

...