вот мое предложение, при условии, что и 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