openID学习总结

原创 2018年04月14日 23:21:45

openID学习总结

背景

最初,网站需要记录用户认证信息如用户名和密码,用户需要提供认证信息以登录网站并使用网站中的其他功能。在一开始,这种方式是可行的,对网站提供商而言可以绑定用户、维护网站的用户群。然而,当网站的数量急剧增加,大量的认证信息给用户带来了巨大的负担。
所以,人们就开始设想无密码登录。无密码登录对于拥有多个网站或应用的企业来说尤为重要,毕竟每登录一个网站或安装一个APP就注册一个认证信息是很“睿智”的行为。
openID无疑是无密码登录的佼佼者,Google,Facebook等大公司都在使用这种方式。

openID简介

openID 可以提供了一种终端用户证明自身身份的方法,这种方法不需要当前网站(Relying Party,RP)访问用户的认证信息如密码或邮箱地址等敏感信息。
openID去中心化得(分散的),没有一个中央的认证机构批准或注册RP或OP(openID Providers).并且终端用户可以自由的选择使用哪一个OP,并且如果更换openID提供商用户也可以保留他们的标识符。
虽然歇息中没有要求必须使用JavaScript或现在浏览器,但openID的认证方案符合AJAX风格。这意味着终端用户无需离开他们当前的网页就可以向RP证明自己的身份。
openID身份认证仅使用标准的HTTP(S)请求和响应,因此不需要用户端软件有任何特殊的配置,openID与Cookie、RP或OP回话管理的机制无关。

openID工作原理

openID的细节在协议文档中有所描述,协议文档地址在这里。这里以较为宏观的视角介绍其工作原理,协议概要的原文如下:

  1. The end user initiates authentication by presenting a User-Supplied Identifier to the Relying Party via their User-Agent.
  2. After normalizing the User-Supplied Identifier, the Relying Party performs discovery on it and establishes the OP Endpoint URL that the end user uses for authentication. It should be noted that the User-Supplied Identifier may be an OP Identifier, as discussed in Section 7.3.1, which allows selection of a Claimed Identifier at the OP or for the protocol to proceed without a Claimed Identifier if something else useful is being done via an extension.
  3. (optional) The Relying Party and the OP establish an association – a shared secret established using Diffie-Hellman Key Exchange [RFC2631]. The OP uses an association to sign subsequent messages and the Relying Party to verify those messages; this removes the need for subsequent direct requests to verify the signature after each authentication request/response.
  4. The Relying Party redirects the end user’s User-Agent to the OP with an OpenID Authentication request.
  5. The OP establishes whether the end user is authorized to perform OpenID Authentication and wishes to do so. The manner in which the end user authenticates to their OP and any policies surrounding such authentication is out of scope for this document.
  6. The OP redirects the end user’s User-Agent back to the Relying Party with either an assertion that authentication is approved or a message that authentication failed.
  7. The Relying Party verifies the information received from the OP including checking the Return URL, verifying the discovered information, checking the nonce, and verifying the signature by using either the shared key established during the association or by sending a direct request to the OP.

在详细说明之前,首先需要明确几个名词、

  • Relying Party, 依赖方,即当前想要通过openID来认证当前用户的应用,简称为RP
  • OpenID Provider, 认证提供者,即真正对用户信息进行验证的一方,简称OP

openID的工作流程为:

  1. 用户输入一个用于认证的URL(这正是openID的哲学,即:URL可以用来唯一标识一个网络资源,那么也同样可以使用URL标识一个用户,但是这里并非是说每个人都有一个不同的URL这么简单)
  2. RP方拿到这个URL,解析其中的信息,获取到OP的server,delegate等相关信息
  3. (可选的)RP根据得到的OP的信息和OP沟通,确定一个秘钥。OP方使用这个秘钥对用户的信息进行签名,而RP方获取到这个秘钥可以在后续过程中直接验证用户发来的签名是否是正确的,不需要每次认证都要讲用户的信息发送给OP方。
  4. RP方通过得到的OP信息,将用户重定向到OP方。
  5. OP方验证用户是否持有这个URL。OpenID并没有约束需要如何验证,一种简单的方式就是要求用户提供用户名和密码。这样也就验证了这个用户是合法的。
    (可以发现,RP重定向到OP,而真正的验证在OP方,用户输入的敏感信息如密码,邮箱等不会被RP获得)
  6. OP将用户重定向到RP提供的return_to_url(这个应该是在步骤5进行时RP将此信息通知了OP),也即返回RP方并携带了认证成功或失败的信息(如果步骤三执行狗,则携带了通过秘钥签名过的参数)
  7. RP方验证返回的URL,验证得到的信息,验证nonce,如果第三步执行的话则使用秘钥验证签名参数,如果没有第三部,则发送验证请求到OP方,问他这个签名是否是你签的,最终OP方会返回。

还有一些细节没有讲清楚,后面再仔细写一下。有不正确的地方欢迎指正。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MecroZhi/article/details/79945564

对OpenID的学习和理解以及基本流程

OpenID是一个以用户为中心的开放的、分散的、自由的用于网络上用户身份验证的身份验证解决方案。这种方案可以让用户使用唯一的URL地址,就可以在任何支持OpenID认证的网站上登录和应用,我们可以用它...
  • simonhe1973
  • simonhe1973
  • 2008-08-04 17:36:00
  • 3684

openid资料大全

  • 2010年07月13日 15:48
  • 5.76MB
  • 下载

Spring MVC 学习总结

每个请求处理方法可以有多个不同的参数,以及一个多种类型的返回结果。 一、Action参数类型 如果在请求处理方法中需要访问HttpSession对象,则可以添加HttpSession作为参数,Sp...
  • zhangguo5
  • zhangguo5
  • 2016-07-12 16:41:20
  • 2140

Java学习总结

转载自:http://www.dayol.cn/html/world/allcol/2007/0619/6011.html同时感谢该博客众多源代码为我带来的帮助。 ...
  • superdont
  • superdont
  • 2007-07-09 11:27:00
  • 3130

学习前端阶段性总结

明儿就进入3月份了,时间过的真快。从去年10月份开始决定做前端,转眼间也快4个月了,道路并不平坦。我是本着本科的时候做过几个页面,心里觉着前端好像很简单的样子,还觉着自己有些审美,能把页面做的很漂亮。...
  • XIAOZHUXMEN
  • XIAOZHUXMEN
  • 2016-02-29 21:48:12
  • 1513

程序员的学习总结

数据结构+算法 网络编程 分布式框架
  • very_loong
  • very_loong
  • 2017-09-16 10:44:49
  • 368

阶段学习总结

阶段学习总结 从开始学习java到现在已经过了40多天过去了,同时也学习了java中非常重要的一部分就是面向对象的相关知识,面向对象也是java中较难的一部分,因为它是一种抽象的思想,在这一个阶段的...
  • LS1910831673
  • LS1910831673
  • 2016-12-05 18:59:38
  • 832

一年来的学习总结

回顾转眼间,大学生活就过去了四分之一。回首这最开始的一年: 前半段,迷迷糊糊,规规矩矩地跟着课程走了半年,老老实实啃课本,踏踏实实做作业,有了空闲时间,就打打游戏,看看电影。一点课外的专业知识都没有...
  • zhoucheng05_13
  • zhoucheng05_13
  • 2016-11-06 18:32:13
  • 706

唐马供电所维护报修系统

  • 2003年12月20日 00:00
  • 281KB
  • 下载

对于第一阶段学习的总结

阶段总结   杨芳芳    第一阶段的学习就到此结束了,在这一段时间中,学到了很多以前没有接触过的知识,让我对java有了很大的了解,并且能够自己编写一些小程序了。下面就是我对于在这段期间的学习情...
  • yff933
  • yff933
  • 2016-11-22 09:13:00
  • 186
收藏助手
不良信息举报
您举报文章:openID学习总结
举报原因:
原因补充:

(最多只允许输入30个字)