3

我已经实现了一项服务,该服务使用 openid4java 库执行 OpenID 登录身份验证所需的操作。

申请流程如下

  1. 用于从用户获取 OpenID 的 JSP 页面
  2. JSP 页面的操作 servlet
  3. Servlet 获取 openid 参数,与服务交互以获取所需的信息,以将用户重定向到实际的 OpenID 提供者进行身份验证。
  4. 提供给 OpenID 提供者的返回 url 是另一个 servlet。
  5. 这个 servlet 从 open id 提供者发送的响应中检索所需的信息,然后与服务交互以检查用户是否通过了 open id 提供者的身份验证。
  6. 如果用户通过身份验证,则 servlet 将用户重定向到主页。

如果您了解我的实施方法,请接受我的以下查询,否则请告诉我,以便我付出更多努力使其易于理解

查询我正在使用 JBoss 5 应用程序服务器。在上面的代码中,我只是获取用户是否经过身份验证的信息,但我需要通知 jboss 一些它应该如何允许用户访问受限资源,即查看网页。

通常我们使用继承org.jboss.security.auth.spi.UsernamePasswordLoginModule的自定义登录模块类进行基于数据库的身份验证(调用服务方法来获取数据库身份验证信息)。但在这种情况下,我需要 servlet 作为服务、用户和 OpenID 提供者之间的通信通道。那么我应该如何集成 servlet 和登录模块实现。

我可能面临的另一个问题是我正在使用两个已实现的 servlet 之间的会话来存储和检索DiscoveryInformation对象。我认为在用户未登录之前无法访问会话。

我遵循的实现方法基于文章http://www.theserverside.com/news/1364125/Using-OpenID

请帮帮我谢谢

4

1 回答 1

0

您的场景中缺少一些东西:openid 是唯一的身份验证方式还是用户也有用户名和密码?在第一种情况下,您可以重构自定义登录以扩展 AbstractServerLoginModule 并传递 openId 帐户信息。否则,您只需链接两个身份验证系统。

对于会话问题,一切都应该没问题,因为会话在浏览器第一次访问服务器时开始并一直持续到由于不活动或以编程方式重置而出现。

于 2010-08-05T07:45:10.710 回答