Вы хотите принять утверждения личности, сделанные другим агентом? Справедливо; Есть сценарии, в которых это имеет смысл. Однако вы должны подтвердить эти утверждения; Есть много способов сделать это, вот некоторые:
- Если вы разделяете базу данных с утверждающей сущностью, вы можете проверить магические числа.
- Вы можете использовать криптографические подписи
- Вы можете проверить, что сообщение приходит от хоста, которому разрешено делать такие утверждения - который должен находиться внутри сети, которой вы управляете, и где вы также контролируете путь между ними, что довольно легко сделать, но очень важно фактор развертывания, который вам нужно документировать.
Самый простой способ, вероятно, состоит в том, чтобы написать свой собственный AuthenticationProvider
, работа которого заключается в том, чтобы посмотреть представленные учетные данные (поле REMOTE_USER
и кто утверждает его в вашем случае) и решить, следует ли создать Authentication
объект. Если нет, то следует сгенерировать исключение. Вы регистрируете своего провайдера аутентификации (предполагая, что это bean-компонент с именем myAuthProvider
) следующим образом:
<security:authentication-manager>
<security:authentication-provider ref="myAuthProvider" />
</security:authentication-manager>
Как я уже сказал, вам понадобится поставщик аутентификации. Если имя пользователя передается через HTTP-заголовок, и вы просто доверяете ему, вы на самом деле находитесь в так называемом случае с предварительной аутентификацией (то есть есть что-то еще, что сделало шаг аутентификации для вас). В документации Spring Security есть целая глава , посвященная этому , на примере которой используется Siteminder: просто измените имя заголовка, и оно должно работать. (Ну, вам также понадобится служба сведений о пользователе, чтобы вы могли сопоставить аутентифицированного пользователя с набором полномочий, которые ему предоставлены, но это целая «другая история».)