У меня есть приложение Seam, которое должно использовать внешний для входа. Логика заключается в следующем:Шов: логин с использованием внешнего приложения SSO
- Мое приложение отправляет пользователю внешний URL SSO
- Пользователь делает то, что он принимает для аутентификации там
- В случае успеха, внешнее приложение перенаправляет пользователя на мое приложение со случайным маркером
- Мой код должен связаться с внешним приложением через HTTP с передается маркер и получить полную информацию о пользователе в ответ
Довольно просто. Но я застрял.
Переадресация идет в/шов/ресурсы/токен. Я намеревался получить Identity из сеанса, заполнить его токеном и аутентифицироваться. Но в обработчике ресурсов пользовательский сеанс, по-видимому, не виден: контекст сеанса имеет значение null. :(
Я пытался сделать LifeCycle.beginCall там, и он работает в некотором смысле:. Логика аутентификации работает, но результат никогда не доступен пользователю (сеанс пользователя по-прежнему имеет пустую идентичность)
Что делать Я не так?
PS Вот более или менее полный код моего ресурса обработчика. Ведение журналов и других несвязанных вещей удалены для краткости.
@Scope(ScopeType.APPLICATION)
@Name("tokenResource")
// @BypassInterceptors
public class TokenResource extends AbstractResource {
@Override
public String getResourcePath() {
return "/token";
}
@Override
public void getResource(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
String token = request.getParameter("token");
// woot?
Lifecycle.beginCall();
Identity identity = Identity.instance();
MyIdentity mid = (MyIdentity) identity;
mid.setToken(token);
mid.login();
response.sendRedirect("/home.seam");
}
Можете ли вы рассказать, что такое провайдер/библиотека SSO? – cetnar
RPX: https://rpxnow.com/ Да, это OpenID, но он также поддерживает не-точно-OpenID-API, такие как Google или Live. –