Java Web应用OpenID第1部分(RP实现)(3)

2019-01-19 16:14

清单 4 中第一行粗体代码显示了对 ConsumerManager.authenticate() 的调用,它其实不执行身份验证调用。它仅接受成功完成与 OP 的发现交互之后返回的 DiscoveryInformation 对象(参见 清单 3),以及身份验证成功之后用户代理(浏览器)指向的 URL。

第二行粗体代码显示了如何通过对 SRegRequest.createFetchRequest() 的静态方法调用创建 SReg 请求。然后通过对 SRegRequest 对象上 addAttribute() 的调用, 您需要的属性作为简单注册扩展(Simple Registration Extension)的一部分从 OP 返回。最后,通过调用 addExtension() 将扩展添加到 AuthRequest 。

openid4java 使所有这些动作都很直观。此时,浏览器指向负责验证用户身份的 OpenID 提供者,用户将在此页面输入其密码。参见

OpenIdRegistrationPage.java 查看执行重定向的 Wicket UI 代码。 图 2 显示了处理身份验证请求的 myOpenID 服务器截图。

图 2. 处理身份验证请求的 myOpenID

此时,您需要确保有代码能处理运行于 URL 上的请求,该 URL 被指定为 “return-to” URL(参见 清单 4)。示例应用程序的 return-to URL 在 RegistrationService.getReturnToUrl() 中被硬编码。

OpenIdRegistrationSavePage 的构造函数破解 Web 请求以查明它是否从 OP 返回。如果该请求确实是从 OP 返回,它必须得到验证。 验证

清单 5 显示的代码用于查明一个请求是否来自 OP。如果是,将会有一个参数 is_return,该参数的值为 true。 如果情况是这样的,那么 openid4java 用于验证请求(实际上是来自 OP 的响应)并取出 清单 4 中请求的属性。

清单 5. 处理 return-to URL

public OpenIdRegistrationSavePage(PageParameters pageParameters) { RegistrationModel registrationModel = new RegistrationModel(); if (!pageParameters.isEmpty()) {

String isReturn = pageParameters.getString(\ if (isReturn.equals(\

MakotoOpenIdAwareSession session =

MakotoOpenIdAwareSession)getSession(); DiscoveryInformation discoveryInformation = session.getDiscoveryInformation(); registrationModel =

RegistrationService.processReturn(discoveryInformation, pageParameters,

RegistrationService.getReturnToUrl()); if (registrationModel == null) {

error(\ } } }

add(new OpenIdRegistrationInformationDisplayForm(\ registrationModel)); }

在这段代码中,Wicket 页面的构造函数首先确定请求来自于 OP,是对先前身份验证请求的响应。它使用一种定制的 Session 类(MakotoOpenIdAwareSession)抓取 DiscoveryInformation 对象,在成功完成与 OP 的发现交互之后,该对象被存储。请求由 RegistrationService.processReturn() 方法使用 DiscoveryInformation 对象、请求参数和 return-to URL 得到验证。如果请求验证成功,会返回一个完全填充的 RegistrationModel 对象。这可以充当

OpenIdRegistrationSavePage 的 Wicket 模型,应用程序可在此继续其预定作用。 转到应用程序

如果对身份验证的响应得到成功检验,用户就有权通过 OpenID 访问由 RP 保护的任何资源。在示例应用程序中,这是注册过程。如果身份验证成功,会跳出一个页面,用户可在此页面审查来自 OP 的信息,并按需更改和保存信息。示例应用程序不包含真正保存注册信息的代码,不过有 hook。图 3 显示了我运行示例应用程序验证我的 OpenID 时来自 OP 的信息。

Figure 3. 显示来自 OP 的个人资料信息的示例应用程序

结束语

OpenID 用于解决大量的在线身份验证问题,已经作为一种可靠的身份管理解决方案而被广为接受。OpenID 的获取很简单,目前注册的 OpenID 已经达到数百万个。与任何其他规范一样,OpenID 身份验证 很复杂,不过 openid4java 极

大地简化了它。在本文中,您已经看到了 OpenID 身份验证的运作方式。您也了解了使用 openid4java 将 OpenID 加入 Java Web 应用程序中有多么简单。 在本文第 2 部分,我们将着重介绍 OpenID 谜题的另外半部分:编写 OpenID 提供者。这一部分的讨论也是围绕示例代码展开的,使用专门为本文编写的示例 Java Web 应用程序。同时,为在 Java Web 应用程序中实现 OpenID 身份验证,请随意使用 RegistrationService.java 上的代码。 回页首 下载 描述 OpenID 示例

名字

openid4java-sample-app.zip

大小 下载方法 4.3 MB HTTP

关于下载方法的信息

参考资料 学习

? OpenID 是一套分散式身份验证系统,它几乎与任何软件架构兼容。“保持 Project Zero 应用程序的安全性,第 3 部分:用 OpenID 保护 Project Zero 应用程序”(Todd Kaplinger 和 Gang Chen,developerWorks,2008 年 2 月)向您展示了如何使用 OpenID 确保 WebSphere sMash 应用程序的安全。 要了解关于 OpenID 的更多信息,没有比 阅读 OpenID 身份验证规范 2.0 版 更好的方式了。 参阅 OpenID Simple Registration Extension 1.0 规范。 “Wicket:一种构建和测试动态 Web 页面的简化框架”(Kumarsun Nadar,developerWorks,2008年 11 月)包含 Wicket 概述及其教程,教授如何使用 Wicket 快速构建基于 Web 的应用程序。 了解关于 Wicket 的更多信息,它是 Apache Foundation 的一个项目。 重温 DiffieHellman 密钥交换。 ? ? ? ? ? ? 对 Java Web 应用程序的安全解决方案感兴趣?请查看 Java Security 论坛 找寻答案或自己发帖查询。 在 技术书店 浏览关于这些主题和其他技术主题的图书。 developerWorks Java 技术专区:在这里可以找到数百篇关于 Java 编程的各个方面的文章。 加入 My developerWorks 社区。 ? ? ? 获得产品和技术

? ? 下载 openid4java。 从 myOpenID 获取 OpenID。 关于作者

J Steven Perry 是一名软件开发人员、架构师和全能 Java 专家,他从 1991 年起就从事专业的软件开发。他的专业兴趣包括 JVM 的内部工作原理和 UML 建模,以及介于两者之间的所有内容。Steve 编写了从技术文档到 Java 代码等各种内容,并且对教学和培训也充满了热情。Steve 是 Java Management Extensions(O’Reilly)的作者,Java Enterprise Best Practices(O’Reilly)的合著者,并撰写了有关软件开发主题和 O'Reilly ShortCut: Log4J 的杂志文章。


Java Web应用OpenID第1部分(RP实现)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:java面试题1

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: