快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
在授予访问权之前检查用户的授权。

下面详细讨论每个步骤。

为什么要使用 AX 扩展?

这个示例应用程序使用 OpenID SReg 和 AX 扩展在 OP 和 RP 之间传递用户信息。这两个扩展都让 OP 和 RP 可以高效地通信。SReg 提供有限的可交换属性,而 AX 实际上可以用来交换任何信息,只要 OP 和 RP 都把它定义为属性。在集群场景中,每个可信的应用程序 (RP) 还可能定义自己的定制的 “厂商扩展”。这是改进 OP 和 RP 之间的通信的另一种方法。本文后面会进一步讨论 AX 扩展。

请求访问受保护资源

示例应用程序 包含一个受保护资源。当应用程序启动并访问 RP URL (http://localhost:8080/openid-provider-sample-app/) 时,装载以下页面:

图 1. 示例应用程序的主页面

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

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

当用户单击这个链接时,执行清单 1 中的代码:

清单 1. 包含受保护资源的应用程序主页面

package com.makotogroup.sample.wicket; . . . public class OleMainPage extends WebPage {  public OleMainPage() {   add(new OleMainForm("form"));  }  public class OleMainForm extends Form {   public OleMainForm(String id) {    super(id);    add(new PageLink("openIdRegistrationPage", new IPageLink() {     public Page getPage() {      return new OpenIdRegistrationPage();     }     public Class<? extends WebPage> getPageIdentity() {      return OpenIdRegistrationPage.class;     }    }));   }  } }

请注意清单 1 中的粗体代码。当用户单击图 1 所示的链接时,Wicket 把用户带到 OpenIdRegistrationPage(资源)。这时,调用链接的目的地,这会运行 OpenIdRegistrationPage 类的构造器。这个类有两个作用:

作为初始调用的入口点。

作为身份验证成功之后从 OP “回调” 的目标。

在发出初始调用以访问这个页面时,没有传递 Wicket PageParameters,RP 知道需要请求 OP 验证用户的身份。

RP 执行发现

为了在 RP 和 OP 之间通信,RP 必须对 OP 执行发现。从编程的角度来看,这很简单(同样是由于 openid4java 简化了编程),但这是一个重要的步骤,所以我把代码分解出来讨论一下。

RP 使用下面的代码(取自 OpenIdRegistrationPage 的构造器)发送发现请求:

DiscoveryInformation discoveryInformation =   RegistrationService.performDiscoveryOnUserSuppliedIdentifier(      OpenIdProviderService.getOpEndpointUrl());

在这段代码中,RP 做两件事:

对 OP 的端点 URL 执行发现。

把本身与 OP 关联起来。(对 Diffie-Hellman 密钥交换和关联期间发生的其他活动的详细解释参见 第 1 部分。)

接下来,由 OP 处理 RP 的发现请求。

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

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

OP 响应发现请求

请记住,在示例应用程序的 RP 和 OP 端都运行 openid4java。因此,在发现 OP 的过程中,openid4java 的 RP 端向 OP 的端点 URL 发送一个空的请求。端点 URL 是联系 OP 的位置,OP 在这里接收所有来自 RP 的请求。OP 必须处理这个请求。看一下 OpenIdProviderService.getOpEndpointUrl(),会注意到端点 URL 是 http://localhost:8080/openid-provider-sample-app/sample/OpenIdLoginPage。

当 RP 向 OP 发送空的请求时,Wicket 构造 OpenIdLoginPage 并运行它的构造器,见清单 2:

清单 2. OP 入口点

public OpenIdLoginPage(PageParameters parameters) 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号