快速业务通道

面向Java Web应用程序的OpenID,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

在本例中,用户提供的标识符是 redneckyogi.myopenid.com。

UI 代码负责两项工作:确保用户在 Your OpenID 文本框中输入了文本,且在用户单击 Confirm OpenID 按钮时提交窗体。在确认之后,应用程序开始调用序列。清单 1 显示了 OpenIdRegistrationPage 中提交窗格和执行调用序列所用的代码。

清单 1. 使用 RegistrationService.java 执行 OpenID 身份验证调用序列的 Wicket UI 代码

Button confirmOpenIdButton = new Button("confirmOpenIdButton") {  public void onSubmit() {   String userSuppliedIdentifier = formModel.getOpenId();   DiscoveryInformation discoveryInformation =   RegistrationService.    performDiscoveryOnUserSuppliedIdentifier(     userSuppliedIdentifier);   MakotoOpenIdAwareSession session =    (MakotoOpenIdAwareSession)owningPage.getSession();   session.setDiscoveryInformation(discoveryInformation, true);   AuthRequest authRequest =    RegistrationService.createOpenIdAuthRequest(     discoveryInformation, returnToUrl);   getRequestCycle().setRedirect(false);   getResponse().redirect(authRequest.getDestinationUrl(true));   } };

试着不要受示例及其使用 Wicket UI 代码的方式困扰(不过如果您很好奇,完全可以查看 OpenIdRegistrationPage.java,也就是清单 1 的来源)。这里的重点是,当用户单击按钮时,UI 代码委托 RegistrationService 的各种方法来调用 openid4java 的 API,主要做三项工作(每一项都在清单 1 中用粗体表示):

在用户提供的标识符上执行发现

创建用于生成身份验证请求的 openid4java AuthRequest 对象

重定向浏览器到 OpenID 提供者

重定向浏览器之后,UI 代码完成任务,现在控制权在 OP 手中。注意,myopenid.com 是标识符的一部分,且用户提供的标识符不是结构良好的 URL。在标识符中仍然需要编码足够的信息,以允许 openid4java 规范化并执行发现。这将在下一部分介绍。

发现(discovery)

RP 采用用户提供的标识符,并将其转化为一种格式,可用于确定两个内容:OpenID 提供者(OP)是谁,如何联系 OP。

RP 使用发现过程来确定如何向 OP 发出请求,而关键便是用户提供的标识符。但是,在将用户提供的标识符用于发现之前,首先必须将其规范化。 openid4java 实际上已经承担了规范化用户提供标识符的工作,所以这里无需再作详细讨论。

两种不同的形式是:

XRI:可扩展资源标识符

URL:统一资源定位符

本文中我们将看一些 URL 示例。图 1 中的用户提供标识符是一个缺少模式的 URL,因此,作为规范化工作的一部分,openid4java 向其附加 “http://”,从而构成声明的标识符 http://redneckyogi.myopenid.com。

声明的标识符中的编码信息包含 OP 的名称,在本例中是 myOpenID。由于声明的标识符是一个 URL,openid4java 知道如何联系 OP — 在 http://myopenid.com上 — 这正是它所要做的。

面向Java Web应用程序的OpenID,第1部分(6)

时间:2011-12-08 ibm J Steven Perry

清单 2(来自示例应用程序的 RegistrationService 类)显示 RP 如何使用 openid4java 执行发现。

清单 2. 使用 openid4java 执行发现

public static   DiscoveryInformation performDiscoveryOnUserSuppliedIdentifier(    String userSuppliedIdentifier) {  DiscoveryInformation ret = null;  ConsumerManager consumerManager = getConsumerManager();  try {   // Perform discover on the User-Supplied Identifi

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号