Seam:使用外部SSO应用程序登录

时间:2009-10-26 13:47:10

标签: java authentication seam single-sign-on identity

我有一个必须使用外部登录的Seam应用程序。逻辑如下:

  • 我的应用将用户发送到外部SSO网址
  • 用户执行在此处进行身份验证所需的内容
  • 成功时,外部应用会使用随机令牌将用户重定向回我的应用
  • 我的代码应该通过HTTP与传递的令牌联系外部应用程序并获得完整的用户信息

非常简单。但是我被困住了。

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

我尝试在那里进行LifeCycle.beginCall,它在某种意义上起作用:身份验证逻辑有效,但结果永远不会被用户使用(用户的会话仍然有空身份)。

我做错了什么?

P.S。这是我的资源处理程序的或多或少的完整代码。为简洁起见,删除了记录和其他不相关的内容。

@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 个答案:

答案 0 :(得分:0)

您可以使用JBoss Picketlink与OpenID和Google集成。他们提供的捆绑包中有几个例子,似乎可以直接将它与Seam一起使用。

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

答案 1 :(得分:0)

或许将身份退回到Session上下文?