OAuth和OpenID的区别

19 sec read

前面两篇文章(OAuth学习笔记OpenID学习笔记)都说了可以用来认证身份,但是他们之间到底有哪些不同,哪些情况应该用OAuth,哪些情况应该用OpenID呢?下面就一起来看下他们之间的区别。

简短的说,OAuth关注的是authorization;而OpenID侧重的是authentication。从表面上看,这两个英文单词很容易混淆,但实际上,它们的含义有本质的区别:

  • authorization: n. 授权,认可;批准,委任
  • authentication: n. 证明;鉴定;证实

OAuth关注的是授权,即:“用户能做什么”;而OpenID关注的是证明,即:“用户是谁”。下面就分别来说两者的功能。

OpenID

  1. 用户希望访问其在example.com的账户
  2. example.com (在OpenID的黑话里面被称为“Relying Party”) 提示用户输入他/她/它的OpenID
  3. 用户给出了他的OpenID,比如说”http://user.myopenid.com”
  4. example.com 跳转到了用户的OpenID提供商“mypopenid.com”
  5. 用户在”myopenid.com”(OpenID provider)提示的界面上输入用户名密码登录
  6. “myopenid.com” (OpenID provider) 问用户是否要登录到example.com
  7. 用户同意后,”myopenid.com” (OpenID provider) 跳转回example.com
  8. example.com 允许用户访问其帐号

OAuth

  1. 用户在使用example.com时希望从mycontacts.com导入他的联系人
  2. example.com (在OAuth的黑话里面叫“Consumer”)把用户送往mycontacts.com (黑话是“Service Provider”)
  3. 用户在mycontacts.com 登录(可能也可能不用了他的OpenID)
  4. mycontacts.com问用户是不是希望授权example.com访问他在mycontact.com的联系人
  5. 用户确定
  6. mycontacts.com 把用户送回example.com
  7. example.com 从mycontacts.com拿到联系人
  8. example.com 告诉用户导入成功

OpenID是用来验证的,就是说可以用一个url来唯一表明身份(不用挨个记每个网站的用户密码)。OAuth是用来授权的(俺可以授权一个网站访问俺在另外一个网站的数据,而俺不用把俺的密码给第一个网站。

很多人现在错误的把OAuth当做OpenID使用。但是其实也不会照成什么影响。如水煮鱼开发的WordPress插件:

WordPress的评论只要求身份认证即可,无需权限认证。

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

C语言学习:size_t

在学习C语言的时候,遇到了一个新的数据类型size_t,截止目前也没有完全理清这个类似的具体场景及出现的原因。
44 sec read

C语言学习:main()函数的正确写法

C语言虽然是一门古老的语言,但是其标准一直在完善,所以很多以前支持的语法在到当前已经不能在使用了。 C语言的版
41 sec read

Scipy数学函数的Scala实现

最近在推进项目的时候,遇到需要将线下的Python代码转化成线上的集群代码,由于机器代码环境是Scala,所以
4 min read

3 Replies to “OAuth和OpenID的区别”

  1. 能说说这个场景吗?比如回帖时可以用新浪微博帐号登录/用gmail帐号登录,应该是一个OAuth,但是整个过程又有openID的味道。它auth到了什么?

    1. 通过oauth使用新浪微博账号登录的时候只是验证了你的身份,其实就是Openid的功能,默认的授权是让网站获取你的基本信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注