войти как прокси для определенного пользователя - PullRequest
3 голосов
/ 18 апреля 2010

У нас есть требование, согласно которому администратор должен прокси-сервер в качестве определенного пользователя в среде, где администратором управляет несколько пользователей (роль: пользователь) (роль: администратор).

Например, если у нас есть следующие пользователи в базе данных (admin, user1, user2, user3), мы бы хотели, чтобы администратор прокси-сервер использовал «user2» и использовал систему в определенных сценариях. Аутентификация в нашем веб-приложении основана на учетных данных имени пользователя и пароля, какие механизмы доступны для администратора для прокси-сервера как «user2», когда у него нет пароля для «user2». Как приложение может отслеживать такой доступ в целях аудита, если упомянуть, что «admin» проксировал «user2» и выполнил определенные действия.

Я ищу предложения по поддержке этого в нашем веб-приложении j2ee (jboss seam).

Ответы [ 3 ]

2 голосов
/ 22 апреля 2010

Вы можете реализовать собственный метод аутентификации, который сначала проверяет имя_пользователя / имя_пользователя если это не сработает, проверьте user_name / admin_pw, чтобы при использовании пароля администратора можно было войти под любым пользователем.

15.3.2. Написание метода аутентификации

1 голос
/ 25 апреля 2010

Вы можете создать собственный метод registerAdminAsUser ().

@Name("authenticationProxy")
public class AuthenticationProxy {

    private @In org.jboss.seam.security.Identity identity;

    /**
      * Starting with Seam 2.1+, you should use Credentials instead of Identity
      * To collect your username and password
      *
      * Your JSF Form should looks like
      *
      * <h:inputText value="#{credentials.username}"/>
      * <h:inputSecret value="#{credentials.password}"/>
      */
    private @In org.jboss.seam.security.Credentials credentials;

    public String registerAdminAsUser2() {

        identity.getCredentials().setUsername("user2");

        /**
          * Here you should provide any role which should be assigned to User2
          */
        identity.addRole("<A_ROLE>");
        identity.addRole("<OTHER_ROLE>");
        identity.addRole("<ANOTHER_ROLE>");

        /**
          * Do not call login method because it will call authenticate one
          * You do not have User2 password
          */
        // identity.login();

        return "loggedIn";
    }

    /**
      * Be aware you may need a unregisterAdminAsUser2
      */

}

И чтобы включить свой прокси, создайте команду Кнопка

<h:commandButton value="register Admin as User2" value="#{authenticationProxy.registerAdminAsUser2}" rendered="#{credentials.username == 'admin'}"/>

Чтобы использовать какой-либо компонент JSF, сделайте следующее

<h:commandLink rendered="#{s:hasRole('<ANY_ROLE_ASSIGNED_TO_USER2_GOES_HERE>')}"/>

Я надеюсь, что это может быть полезно для вас!

0 голосов
/ 22 апреля 2010

То, как я это делаю, обычно включает в себя сохранение двух идентичностей, я называю их логическими и физическими. Логическая идентификация используется для проверок полномочий, физическая - это действительная идентификация (пользователь, сидящий за клавиатурой). В обычных сценариях логическая идентификация = физическая идентификация, но чтобы позволить пользователю (обычно администратору) «действовать» как другой пользователь, вы можете затем изменить логическую идентификацию на идентификацию целевого пользователя. Таким образом, приложение ведет себя в соответствии с логическим пользователем, но вы всегда отслеживаете, кто на самом деле сидит за компьютером с физическим пользователем. Надеюсь, это поможет.

...