参考内容: http://www.theserverside.com/tt/articles/article.tss?l=OpenID
OpenID 协议概述:
上图展示了 OpenID 协议中,用户, RP 与 OP 之间最常用的认证流程。分为七步
1 请求用户ID
第一步当然是要求用户提供 OpenID 了。不过这个 OpenID 也是有说法的, OpenID 可以以 URL 的形式存在,就是我们熟悉的 http 或者 https ,也可以是 XRI 的形式,不过现在为止我还没有发现 XRI 形式的 OpenID ,先放到一边不管,知道就行了。有时间看看 XRI 的语法规范 ,内容好像不是很多。
2 整理 OpenID
其实呢,用户在输入 OpenID ,点击登录之后, RP 就开始忙活了,首先就是要检查用户的 OpenID 是否符合规范,如果不符合规范,就要对 OpenID 进行修正或者补全。比如我的 OpenID 是 http://tihualong.myopenid.com 如果我输入了 tihualong.myopenid.com ,你也得认出来 ( 不然这么弱的话,谁喜欢用啊,偷懒都不能偷懒 ) 。而且更可恶的是需要考虑到 OpenID 有可能是 XRI 的形式,更增加了标准化的复杂性。该死的兼容性 ( 使用 XRI 的用户也是这么想的吧,呵呵 ) 。列一下整理的规则
1 以 xri:// xri://$ip 或者 xri://$dns 开头的,统统砍头,去掉这些标识
2 如果余下的字符串第一个字符是 xri 的全局标识符,那么它已经是规范化的 OpenID 了,否则视为 HTTP URL 进行处理,没有 http 或者 https 头的,加上 http 。
下面是一些例子:
下图是参考文章上 OpenID 的整理流程
看起来好像也不是很复杂。不管,反正不是自己写,都有人封装好了。
3 发现阶段, RP 查询与 OP 进行通讯的方式
话说这个阶段是非常重要的, RP 使用整理过的 OpenID 查找发出请求必需的参数, RP 会瞒着用户偷偷的跟 OP 接头, RP 把自己假装成一个用户,向 OP 询问要发出一个合法请求需要提供哪些参数, OP 会返回给 RP 一个 XML 文档,告诉 RP ,我需要哪些哪些参数,这个 OpenID 的服务地址是什么什么,你要将用户重定向到哪里哪里进行登录验证等等。当然这些过程都是在用户不知道的情况下进行的。
而且,比较重要的一点是:这个阶段使用的协议以及返回的结果文档都取决于整理阶段查到的 OpenID 的标识类型
OpenID类型
|
协议
|
结果文档
|
XRI
|
XRI
|
XRDS
|
URL
|
Yadis
|
XRDS
|
URL
|
HTML Discovery
|
HTML
|
4 RP 与 OP 建立关联
创建 RP 与 OP 关联之后,可以在两者之间使用加密的方式验证后续的协议消息并降低通信数 ( 不知道这样理解对不对 ) 简单来说,就是使用了一种 Diffie-Hellman 密钥交换算法生成的共享密钥对传递的消息进行数字签名。
这种机制能保证 RP 与 OP 可以进行安全的进行通信,这种安全性可以通过在传输层使用 SSL 协议或者使用 HMAC SHA1 或者 HMAC SHA256 实现。 RP 请求成功后会得到一个通讯句柄, RP 和 OP 将会在后续的活动中将它作为对消息进行加密的密钥使用。
这一步骤是可选的,因为 OpenID 协议允许不通过建立关联直接请求认证,接着请求对认证信息进行验证。这样 RP 可以是无状态的,不需要保存通讯句柄 ( 在协议中这种方法号称 dumb 模式:沉默模式 ) ,这种方式被推荐用于执行与 OP 的通信,但是如果不能用这种方式,就必须建立关联。
( 有关 openid 的加密验证模式可以参考 http://tenglong.blog.51cto.com/180708/29866)
注: OpenID 认证同时支持 “ 智能模式 ” 和 “ 沉默模式 ” 来容纳不同的 RP 。 一个智能的 RP 用保存状态信息的方式以便在开始阶段完成少许的工作。 一个 “ 沉默模式 ” 的 RP 则是完全的无状态的,但是需要一个额外的 HTTP 请求。
- 大小: 33.3 KB
- 大小: 30.9 KB
分享到:
相关推荐
#### 一、OpenID协议概述 OpenID是一种开放式的身份验证标准,它允许用户使用单一的登录凭证来访问多个不同的网站或应用,而无需为每个站点分别设置用户名和密码。这不仅简化了用户的登录过程,也减轻了网站维护...
通过下载并分析JOpenID.zip压缩包中的源代码,我们可以深入理解OpenID协议的工作原理以及如何在Java应用中实现它。 **JOpenID的核心组件** 1. **Discovery机制**:OpenID的发现过程是找到提供者的URL并获取其服务...
在构建自己的OpenID提供者时,需要实现OpenID协议的相关规范,确保能够正确处理来自其他应用的认证请求。这包括设置服务器端的基础设施、处理身份验证请求和响应,以及可能的安全措施,如防止恶意请求。 总之,...
OpenID是一种去中心化的认证协议,使得用户可以更方便地访问Java Web应用程序中的资源。在本文中,我们将学习OpenID认证规范,并一步步地将其集成到一个Java应用程序中。我们不会手动实现OpenID认证规范,而是使用...
为了确保通信的安全性,OpenID 2.0采用了多种安全措施,如签名算法(如SHA-1)、MAC(Message Authentication Code)、随机序列(Nonce)等,以防止重放攻击和其他潜在的安全威胁。此外,协议还要求对所有消息进行...
可以在此处找到概述如何使用库进行企业单点登录的演讲(由Google生产): 。 下载 适用于Android的在上 implementation ' net.openid:appauth:0.8.1 ' 要求 AppAuth支持Android API 16(Jellybea
标题:yadis-v1.0 描述:关于OpenID的协议指南,很好的OpenID资料。 根据提供的文件信息,我们深入探讨的是Yadis ...对于希望深入了解OpenID协议及其底层技术的开发者来说,这份文档提供了宝贵的指导和参考。
【Terraform AWS CloudFront OpenID Connect 概述】 Terraform 是一款强大的基础设施即代码(IAC)工具,允许用户以声明式的方式管理和配置云服务。在本案例中,"terraform-aws-cloudfront-openid" 提供了一个使用 ...
1. **Matrix 协议核心概念**: - **分布式架构**:Matrix 将通信网络分散到多个服务器上,通过跨服务器同步实现信息的传递,确保用户间消息的即时性和可靠性。 - **房间(Rooms)**:Matrix 的基本通信单元是房间...
OpenID Connect (OIDC) 是一种基于OAuth 2.0协议的身份验证层,它允许用户通过身份提供者(Identity Provider, IDP)安全地与应用进行交互。JsOidc 是一个JavaScript库,专门用于实现OIDC客户端功能,尤其适用于单页...
【OAuth2协议概述】 OAuth2是一种授权框架,广泛应用于开放API的权限管理,如社交平台的第三方应用登录。它允许用户授权第三方应用访问特定的资源,而无需共享用户名和密码。OAuth2的核心概念包括:资源所有者...
**内容概述:** RFC(Request for Comments)是互联网工程任务组(IETF)制定和发布的技术标准文档,用于记录和传播互联网相关的协议、规范、建议和技术解决方案。这个标题表明包含的是从4501到5000号的RFC文档集合...
【云计算标准概述】 在云计算领域,标准化是确保不同服务提供商之间互操作性和兼容性的关键因素。这使得用户能够在多个平台上无缝地迁移数据和应用程序。"Chapter 5 Standards"的课件详细介绍了在云计算环境中用于...
在技术概述部分,Spring Security的运行环境和核心组件被详细解释,包括SecurityContextHolder、SecurityContext和Authentication对象,UserDetailsService接口,GrantedAuthority概念,以及验证和访问控制的流程。...
#### 一、多账号体系概述 多账号体系是指在同一个应用或服务中支持多种登录方式的用户管理体系。它允许用户通过不同的第三方平台(如微博、微信、Facebook等)进行注册和登录,同时也支持用户在系统内部创建独立...
##### 1.1 OAuth概述 OAuth是一种开放的协议,它为Web、移动和桌面应用提供了一种简单且标准化的方法来进行安全授权。简而言之,OAuth允许第三方应用在不获取用户账户密码的情况下,通过用户授权访问特定的数据和...
1. SMTP(简单邮件传输协议):发送邮件通常采用SMTP协议,客户端应用程序将邮件发送到SMTP服务器,然后SMTP服务器将邮件转发到目标邮件服务器。 2. POP3(邮局协议)/IMAP4(因特网消息访问协议):接收邮件时,...