Пользовательская аутентификация Spring Security 3 от REMOTE_USER - PullRequest
2 голосов
/ 02 августа 2011

Мне нужно реализовать собственную схему безопасности с использованием Spring security 3.0.5.

Пользователь должен аутентифицироваться автоматически (без формы входа) в поле REMOTE_USER запроса. Кажется, я должен реализовать пользовательские AbstractAuthenticationProcessingFilter и AuthenticationManager.

Я в правильном направлении? Какой может быть конфигурация XML?

1 Ответ

3 голосов
/ 02 августа 2011

Вы хотите принять утверждения личности, сделанные другим агентом? Справедливо; Есть сценарии, в которых это имеет смысл. Однако вы должны подтвердить эти утверждения; Есть много способов сделать это, вот некоторые:

  • Если вы разделяете базу данных с утверждающей сущностью, вы можете проверить магические числа.
  • Вы можете использовать криптографические подписи
  • Вы можете проверить, что сообщение приходит от хоста, которому разрешено делать такие утверждения - который должен находиться внутри сети, которой вы управляете, и где вы также контролируете путь между ними, что довольно легко сделать, но очень важно фактор развертывания, который вам нужно документировать.

Самый простой способ, вероятно, состоит в том, чтобы написать свой собственный AuthenticationProvider, работа которого заключается в том, чтобы посмотреть представленные учетные данные (поле REMOTE_USER и кто утверждает его в вашем случае) и решить, следует ли создать Authentication объект. Если нет, то следует сгенерировать исключение. Вы регистрируете своего провайдера аутентификации (предполагая, что это bean-компонент с именем myAuthProvider) следующим образом:

<security:authentication-manager>
    <security:authentication-provider ref="myAuthProvider" />
</security:authentication-manager>

Как я уже сказал, вам понадобится поставщик аутентификации. Если имя пользователя передается через HTTP-заголовок, и вы просто доверяете ему, вы на самом деле находитесь в так называемом случае с предварительной аутентификацией (то есть есть что-то еще, что сделало шаг аутентификации для вас). В документации Spring Security есть целая глава , посвященная этому , на примере которой используется Siteminder: просто измените имя заголовка, и оно должно работать. (Ну, вам также понадобится служба сведений о пользователе, чтобы вы могли сопоставить аутентифицированного пользователя с набором полномочий, которые ему предоставлены, но это целая «другая история».)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...