快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
throws IOException {   super(parameters);   if (parameters.isEmpty()) {    // Empty request. Assume discovery request...    OpenIdProviderService.sendDiscoveryResponse (getResponse());  . . .

注意,如果 OP 接收到空的请求,它会假设这是发现请求。然后,它创建一个 XRDS 文档并发送回请求者。

清单 3 给出 sendDiscoveryRequest() 的代码:

清单 3. 发送对发现请求的响应

public static void sendDiscoveryResponse (Response response) throws IOException {   //   response.setContentType("application/xrds+xml");   OutputStream outputStream = response.getOutputStream();   String xrdsResponse = OpenIdProviderService.createXrdsResponse();   //   outputStream.write(xrdsResponse.getBytes());   outputStream.close();  }

这个 XRDS 文档对于 openid4java 的 RP 端的正确运行很重要。

当 RP 收到 OP 发送的 XRDS 文档时,它知道它已经联系到了这个用户的 OP。然后,RP 创建身份验证请求并发送给 OP。

RP 请求验证用户的身份

RP 请求 OP 确认是否可以验证用户的身份。它执行的一系列调用见清单 4(取自构造器):

清单 4. RP 代码把身份验证委托给 OP

DiscoveryInformation discoveryInformation =   RegistrationService.performDiscoveryOnUserSuppliedIdentifier(      OpenIdProviderService.getOpEndpointUrl());  MakotoOpenIdAwareSession session =   (MakotoOpenIdAwareSession)getSession();  session.setDiscoveryInformation(discoveryInformation, true);  AuthRequest authRequest =   RegistrationService.createOpenIdAuthRequest(      discoveryInformation,      RegistrationService.getReturnToUrl());  getRequestCycle().setRedirect(false);  getResponse().redirect(authRequest.getDestinationUrl(true));

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

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

首先,RP 通过端点 URL 联系 OP。这个调用可能看起来有点儿奇怪,但是请记住,在这个场景中应用程序集群使用一个可信的伙伴作为 OP。从 RP 的角度来看,验证用户提供的身份只需发现 OP 的位置,让 openid4java 构造后续交互所需的对象。OP 负责处理身份验证机制。

接下来,获取当前的 Wicket Session,把从 openid4java 获取的 DiscoveryInformation 存储起来供以后使用。我编写了一个特殊的 Session 子类 MakotoOpenIdAwareSession,这样便于在 Session 中存储 openid4java 对象。

然后,用从 openid4java 获取的 DiscoveryInformation 对象创建身份验证请求。这个对象告诉 Wicket 重定向到哪里以执行身份验证调用。

这些步骤与第 1 部分中的步骤相同。我在这里重复解释它们是因为本文使用的示例应用程序架构与第 1 部分的代码不太一样。我还希望您查看 OP 端的 API 调用,能够把它们联系在一起。

现在,RP 等待 OP 发送身份验证响应。在讨论下一个步骤之前,我们先看一下 Attribute Exchange 在用户身份验证中的作用。

OpenID Attribute Exchange 扩展

在第 1 部分中,我们简要讨论了 Simple Registration (SReg) 扩展,可以用 SReg 在 RP 和 OP 之间交换特定的信息集(由 SReg 规范定义)。看一下本文示例应用程序中的 createOpenIdAuthRequest() 方法,会注意到 RP 使用另一个扩展 OpenID Attribute Exchange (AX) 向 OP 请求信息。

与 SReg 扩展一样,OpenID Attribute Exchange (AX) 用于在 RP 和 OP 之间以一致的标准的方式交换信息。但是与 SReg 不同,

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