2009-10-26 6 views
1

У меня есть приложение 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"); 
    } 
+0

Можете ли вы рассказать, что такое провайдер/библиотека SSO? – cetnar

+0

RPX: https://rpxnow.com/ Да, это OpenID, но он также поддерживает не-точно-OpenID-API, такие как Google или Live. –

ответ

0

Вы можете использовать JBoss Picketlink для интеграции с OpenID и Google. есть пару е xamples в комплекте, который они предлагают, и, кажется, прямолинейно используют его с Seam.

лишь небольшая вещь, чтобы замечать и заботиться, что проект находится на ранней стадии, поэтому несколько ошибок могут выскочить в.

0

Возможно outject идентичности обратно к контексту сессии?

Смежные вопросы