пружинная безопасность: авторизация без аутентификации

Editra может быть достойный внимания, окраска кода не плоха, и я полагаю, что это имеет плагины для включения выполнения сценария.. Хотя я имею не , использовал это сам.

20
задан Lukas Eder 9 October 2012 в 11:41
поделиться

5 ответов

Если ваша аутентификация уже выполнена с использованием службы SSO, то вам следует использовать один из фильтров предварительной аутентификации Spring Security . Затем вы можете указать службу UserDetails (возможно, настраиваемую), которая будет использовать принцип предварительной аутентификации для заполнения GrantedAuthority

SpringSecurity включает несколько фильтров предварительной аутентификации, включая J2eePreAuthenticatedProcessingFilter и RequestHeaderPreAuthenticatedProcessingFilter. Если вы не можете найти тот, который вам подходит, тоже возможно, и не так сложно написать свой собственный, при условии, что вы знаете, в каком месте запроса ваша реализация SSO хранит данные. (Это, конечно, зависит от реализации.)

Просто реализуйте интерфейс Filter и сделайте что-то вроде этого в методе doFilter:

public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

    // principal is set in here as a header or parameter. you need to find out 
    // what it's named to extract it
    HttpServletRequest req = (HttpServletRequest) request; 

    if (SecurityContextHolder.getContext().getAuthentication() == null) {
        // in here, get your principal, and populate the auth object with 
        // the right authorities
        Authentication auth = doAuthentication(req); 
        SecurityContextHolder.getContext().setAuthentication(auth);
    }

    chain.doFilter(request, response);
}
22
ответ дан 30 November 2019 в 00:35
поделиться

Да, это возможно. Spring Security (как и большая часть остальной части Spring) управляется интерфейсом, поэтому вы можете выборочно подключать свои собственные реализации для разных частей платформы.

Обновление: Механизмы авторизации и аутентификации Spring работают вместе - аутентификация механизм аутентифицирует пользователя и вставляет различные экземпляры GrantedAuthority в контекст безопасности. Затем они будут проверены механизмом авторизации, чтобы разрешить / запретить определенные операции.

Используйте ответ nont для получения подробной информации о том, как использовать ранее существовавшую аутентификацию. Детали того, как вы получаете детали из вашего сеанса (например, роли), конечно, будут зависеть от вашей конкретной настройки. собственные фильтры или контроллеры MVC для обеспечения взаимодействия с системы аутентификации, которые не на основе Spring Security. Например, вы можете использовать управляемый контейнером Аутентификация, которая делает текущий пользователь доступен в ThreadLocal или Местоположение JNDI . Или вы можете работать на компания, у которой есть устаревшая проприетарная система аутентификации, которая является корпоративный "стандарт", выше которого вы иметь небольшой контроль. В таком ситуации довольно легко получить Spring Security для работы, и все еще предоставить возможности авторизации. Все, что вам нужно сделать, это написать фильтр (или эквивалент), который читает информация о сторонних пользователях из место, построить Весна Зависящая от безопасности Аутентификация объект и положите его на SecurityContextHolder . Это довольно просто сделать это, и это полностью поддерживаемый подход к интеграции.

3
ответ дан 30 November 2019 в 00:35
поделиться

The server that handles the authentication should redirect the user to the application passing to it some kind of key (a token in CAS SSO). Then the application use the key to ask to the authentication server the username and roles associated. With this info create a security context that is passed to the authorization manager. This is a very simplified version of a SSO login workflow.
Take a look to CAS SSO and CAS 2 Architecture.
Tell me if you need more information.

2
ответ дан 30 November 2019 в 00:35
поделиться

у нас было такое же требование, когда мы должны были использовать spring security только для авторизации. Для аутентификации мы использовали Siteminder. Вы можете найти более подробную информацию о том, как использовать авторизацию в spring security, а не аутентификацию здесь http://codersatwork.wordpress.com/2010/02/13/use-spring-security-for-authorization-only-not-for-authentication/

Я также добавил исходный код и тестовые примеры на http://code.google.com/p/spring-security-with-authorization-only/source/browse/

1
ответ дан 30 November 2019 в 00:35
поделиться

Я пытаюсь понять аутентификацию CAS с нашей собственной авторизацией и запутался, поскольку объект User в Spring Security всегда ожидает, что пароль будет заполнен, а в нашем сценарии нам это не важно. После прочтения сообщения Сурабха кажется, что хитрость заключается в том, чтобы вернуть пользовательский объект User без заполненного пароля. Я попробую это и посмотрю, сработает ли это в моем случае. Надеюсь, что никакой другой код в цепочке не будет ожидать пароля в объекте User.

1
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: