2015-10-26 2 views
3

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

Я довольно близко к тому, чтобы иметь эту работу, как я ожидаю, но поразил стену, что, я уверен, связан с моим недостатком понимания Wildfly/JBOSS.

Я следующий домен безопасности определены в моем standalone.xml

<security-domain name="client_cert_domain" cache-type="default"> 
       <authentication> 
        <login-module code="Certificate" flag="required"> 
         <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/> 
         <module-option name="securityDomain" value="client_cert_domain"/> 
        </login-module> 
       </authentication> 
       <jsse keystore-password="secret" keystore-url="file:${jboss.server.config.dir}/Certificates/HQ/KeyStore" truststore-password="secret" truststore-url="file:${jboss.server.config.dir}/Certificates/HQ/cacerts.jks" client-auth="true"/> 
      </security-domain> 

и мой web.xml является

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Registration page only</web-resource-name> 
     <url-pattern>/register/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>User</role-name> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>CLIENT-CERT</auth-method> 
    <realm-name>Some Name For User To See</realm-name> 
</login-config> 

Наконец, мой JBoss-web.xml

<jboss-web> 
    <security-domain>client_cert_domain</security-domain> 
</jboss-web> 

Это d oes почти точно, что я хочу. На главной странице не требуется аутентификации и/register/требуется сертификат клиента. Единственная проблема заключается в том, что, поскольку это не зарегистрированный пользователь, у них нет назначенных им ролей, поэтому страница заблокирована, так как они не входят в роль «Пользователь», указанную в теге ограничения аутентификации.

Есть ли простой способ автоматически назначить роль по умолчанию любому пользователю, который выполняет аутентификацию с использованием клиентских сертификатов, без необходимости их предварительного определения в файле role.properties?

ответ

4

Как обычно, я, кажется, наткнулся на свой ответ вскоре после публикации этого вопроса.

Я копаю все перечисленные модули входа here. Изучив модуль Identity, я решил, что попробую включить его после проверки подлинности сертификата и просто указать параметр «роли». Поэтому я закончил со следующим.

<security-domain name="client_cert_domain" cache-type="default"> 
    <authentication> 
     <login-module code="Certificate" flag="required"> 
      <module-option name="password-stacking" value="useFirstPass"/> 
      <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/> 
      <module-option name="securityDomain" value="client_cert_domain"/> 
     </login-module> 
     <login-module code="Identity" flag="required"> 
      <module-option name="password-stacking" value="useFirstPass"/> 
      <module-option name="roles" value="User"/> 
     </login-module> 
    </authentication> 
    <jsse keystore-password="Password1" keystore-url="file:${jboss.server.config.dir}/Certificates/HQ/KeyStore" truststore-password="Password1" truststore-url="file:${jboss.server.config.dir}/Certificates/HQ/cacerts.jks" client-auth="true"/> 
</security-domain> 

Это, кажется, функционально делает то, что я хочу. Указав опцию укладки пароля на оба модуля входа, он гарантирует, что аутентификация происходит только с использованием клиентских сертификатов. Второй модуль входа в систему Identity просто добавляет роль «Пользователь» к тому, кто вошел в систему. Теперь, когда я обращаюсь к любым ресурсам в моем защищенном каталоге, указанном в моем web.xml, мне предлагается мой сертификат и разрешено.

Надеюсь, это поможет кому-то еще в будущем.