代码之家  ›  专栏  ›  技术社区  ›  Vladimir Dyuzhev

seam:使用外部sso应用程序登录

  •  1
  • Vladimir Dyuzhev  · 技术社区  · 16 年前

    我有一个seam应用程序,必须使用外部程序才能登录。其逻辑如下:

    • 我的应用程序将用户发送到外部SSO URL
    • 用户在那里进行身份验证
    • 成功后,外部应用程序使用随机令牌将用户重定向回我的应用程序
    • 我的代码应该使用传递的令牌通过http与外部应用程序联系,并获得完整的用户信息作为回报

    很直截了当。但我被卡住了。

    重定向到/seam/resources/token。我打算从会话中获取标识,用令牌填充它,然后进行身份验证。但在资源处理程序中,用户会话显然不可见:会话上下文为空。:(

    我尝试在那里执行lifecycle.begincall,它在某种意义上起作用:身份验证逻辑起作用,但结果永远不会对用户可用(用户的会话仍然具有空标识)。

    我做错什么了?

    这里是我的资源处理程序的或多或少完整的代码。为了简洁起见,日志和其他无关的东西被删除了。

    @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");
        }
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Markos Fragkakis    15 年前

    可能会将标识丢弃回会话上下文?

        2
  •  0
  •   JMax Dan    14 年前

    你可以使用 JBoss Picketlink 与openid和google集成。他们提供的捆绑包中有两个示例,似乎可以直接将其与seam一起使用。

    唯一需要注意和注意的一件小事是项目处于早期阶段,因此可能会出现一些bug。