Во-первых, вам нужно включить SSL для JBoss, используя сертификат сервера в качестве хранилища ключей, и связанное хранилище доверенных сертификатов для цепочек сертификатов CA, которые подписали сертификат серверов, и любые цепочки, которые используются для подписи клиента, удостоверяющего вас. хотите взаимодействовать с вашим сервером. Вы также захотите установить для clientAuth либо «true» (клиенты должны иметь сертификат), либо «want» (позволяющий использовать другой метод аутентификации, такой как BASIC, в случае, если у клиента нет сертификата клиента):
Теперь в вашем веб-приложении вам необходимо настроить Spring и включить фильтр предварительной авторизации X509. Это извлекает DN клиента из атрибута запроса сервлета javax.servlet.request.X509Certificate
. Часть этого DN затем может быть извлечена (например, CN), и затем она используется вместе с реализацией UserDetailsService
для поиска (в БД или посредством вызова WS, например) информации о пользователях.
Помимо этого, вы можете предоставлять авторизацию на основе таких данных пользователя, как роли, группы, организации и т. Д.
Простая конфигурация Spring для этого может выглядеть примерно так (непроверено и чисто по памяти много раз, когда я писал что-то подобное):
<http:http>
<!-- X509 Filter to extract PKI CN field as the users name, which is then
passed to the userService to lookup their details (such as roles) -->
<http:x509 subject-principal-regex="CN=(.*?),"
user-service-ref="userService"/>
<!-- filter all traffic to any URL, user must be authenticated and had the specified
role in their UserDetails object -->
<intercept-url pattern='/**' access='ROLE_USER' />
</http:http>
<!-- Custom user service that calls out to Restful web service to acquire user
details information, based upon the PKI Certs CN field -->
<beans:bean id="userService"
class="com.domain.security.user.ws.RestfulUserService">
</beans:bean>
Наконец, это много текста для чтения, но документация для Spring Security довольно хорошая, и содержит примеры и понимание того, что происходит за кулисами - я очень рекомендую прочитать (это то место, где я все это узнал! ):