Как войти на сайт, который использует Spring Security с другого сайта? - PullRequest
0 голосов
/ 27 октября 2011

Для простоты назовем 2 сайта:

  • A - сайт, на котором уже находится пользователь

  • B - сайт, который использует Spring Security, где пользователь должен получить

Поток, которого я пытаюсь достичь, следующий:

  • пользователь вошел в систему на сайте A (который знает свои учетные данные для сайта B)
  • пользователь нажимает на ссылку на сайте A, которая ведет его на сайт B; это также регистрирует его на B, поэтому ему не нужно вводить информацию об учетной записи
  • когда пользователь выходит из сайта B, он перенаправляется на сайт A

Каковы возможные / лучшие способы сделать это?

Edit: A - это приложение CGI, работающее на веб-сервере Apache. Б работает на Tomcat. Решение SSO, вероятно, решит проблему, однако ее сложно настроить. Я пытался найти что-то более простое, учитывая, что у меня уже есть доступ к учетным данным. Моей первой идеей было использование запроса AJAX POST непосредственно на странице j_spring_security_check. Однако по какой-то причине это не работает. (Я новичок в Spring, поэтому мне было интересно, если кто-нибудь знает альтернативный способ сделать эту аутентификацию).

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

вот мое предложение, при условии, что и A, и B находятся под вашим контролем

есть ссылка в A -> www.a.com/login-to-b

когда пользователь щелкает ссылку, он перенаправляет пользователя (этот URL создается на стороне сервера)

www.b.com / единый вход? User_id = 123 & timestamp = 1234567 & token = hash (user_id + timestamp + your-secret-key)

хеш может быть md5 или sha1, ваш выбор

если A и B оба имеют один и тот же секретный ключ

тогда B может проверить информацию, отправленную из A, снова применив хеш

boolean isValid = hash(request.getParameter("user_id") + 
                       request.getParameter("timestamp") + 
                       KEY).equals(request.getParameter("hash");

временная метка есть, предотвращает повторную атаку

поэтому после того, как B проверит хеш, B также должен проверить, истек ли временной штамп или нет

// suppose we make it 5 sec to expire
boolean isExpired = System.currentTimeMillis() - timestamp < 5000; 

если обе проверки пройдены, то B может быть уверен, что запрос на перенаправление действительно поступает с www.a.com с законным пользователем

теперь вы знаете user_id в B, затем выполняйте специфические для вашего приложения вещи, чтобы пользователь распознал B

0 голосов
/ 27 октября 2011

Это то, что называется Single Sign On (SSO), и существует множество различных решений, платформ и продуктов для его включения. Это во многом зависит от того, какой сервер приложений и фреймворки вы используете, и платформ, на которых вы работаете, поэтому, если вы немного ищете решения SSO для вашего сервера приложений и фреймворков (то есть Spring Security), вы обязательно столкнетесь с решение.

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