HTTP BasicAuthentication не сразу понимает, когда меняется роль пользователя.Что я могу с этим поделать? - PullRequest
1 голос
/ 04 января 2011

Я развернул веб-сервис на JBossAS 5.1 GA. Чтобы использовать базовую аутентификацию HTTP, класс SBC аннотируется следующим образом:

    @Stateless
    @SecurityDomain(value = "MyWSSecurity")
    @RolesAllowed(value = "WebserviceUser")
    @WebContext(contextRoot="/MyWS", urlPattern="/*", authMethod="BASIC", transportGuarantee="NONE", secureWSDLAccess=true)
    @WebService(endpointInterface = "MyWS")
    public class MyWSImpl implements MyWS {

      public String doSomething() {
        return "something";
      }
    }

Обычно это работает нормально. Но следующий сценарий беспокоит меня.

Пользователь, который находится в роли WebserviceUser, вызывает службу.

Роль Webservice теперь отбирается у пользователя.

Проблема: он все еще может позвонить в службу.

Полагаю, это происходит потому, что учетные данные и роли пользователя хранятся в объекте HttpSession на стороне сервера. После перезапуска сервера пользователю отказано в вызове сервиса.

Что я могу с этим поделать?

Привет

РЕДАКТИРОВАТЬ: Эта проблема относится не только к веб-сервисам JBOSSWS EJB3, но и ко всему, что использует аутентификацию JAAS.

1 Ответ

3 голосов
/ 26 января 2011

Найдено 2 решения, которые мне подходят.

Решение 1) Изменить время ожидания по умолчанию для JAAS Cache

Это можно сделать, отредактировав $ JBOSS_HOME / server / default / conf /JBoss-service.conf.Найдите часть файла, где сконфигурирован JaasSecurityManager MBean, и измените атрибут DefaultCacheTimeout на приемлемое небольшое значение (мне подходит 60 секунд).Если вы хотите полностью отключить кэширование учетных данных безопасности, установите значение 0.

<!-- JAAS security manager and realm mapping -->
   <mbean code="org.jboss.security.plugins.JaasSecurityManagerService"
      <!-- 
         skipped some configuration
      -->

      <!-- DefaultCacheTimeout: Specifies the default timed cache policy timeout
      in seconds.
      If you want to disable caching of security credentials, set this to 0 to
      force authentication to occur every time. This has no affect if the
      AuthenticationCacheJndiName has been changed from the default value.
      -->
       <attribute name="DefaultCacheTimeout">60</attribute>
      <!-- DefaultCacheResolution: Specifies the default timed cache policy
      resolution in seconds. This controls the interval at which the cache
      current timestamp is updated and should be less than the DefaultCacheTimeout
      in order for the timeout to be meaningful. This has no affect if the
      AuthenticationCacheJndiName has been changed from the default value.
      -->
      <attribute name="DefaultCacheResolution">30</attribute>
      <!-- 
         skipped some configuration
      -->
   </mbean>

Решение 2. Вызовите метод flushAuthenticationCache ("MyWSSecurity") в MBean JaasSecurityManager, когда изменяется роль пользователя.

Привет

...