`
geniusian
  • 浏览: 1545 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

OpenID和OAuth的区别及第三方登录的安全隐患分析

阅读更多

不知道什么时候开始,我们已经习惯了点击“用XX帐号登录”或者“Login with XX”来访问网站,但是大多数人可能都不知道这背后涉及的事有多复杂。
OpenID和OAuth完全是为了两种不同的需求而生

OpenID的目标是为了帮助网站确认一个用户的身份
OAuth的目标是为了授权第三方在可控范围下访问用户资源

OpenID是怎么认证用户的?

一个网站如果想要接入OpenID认证是非常简单的,不需要创建应用,不需要App Key,不需要Secret,只需要将用户导向OpenID Provider的Entry并带上Callback,用户只要同意提供信息,你就可以拿到这个用户的“唯一标识”。

请注意这里我使用了“唯一标识”这种说法,因为对于网站来说,OpenID Provider提供的既不是用户的UID,也不是用户的E-Mail,比如Google在默认情况下提供的就是一个几十位长的字符串,这个字符串是随机生成的,第三方网站无法从中获得用户的任何私人信息。这么说可能很抽象,举个例子:

比如我用Google的OpenID服务登录example.com,example.com先把我导向Google的授权页面,我使用Google帐号test@gmail.com登录并同意后,页面跳回example.com,example.com拿到了我的“唯一标识”,这个唯一标识可能是“cd5f2126c2b2f97ca2d446e52c6ff4baea56fd4bcfcea30afcaaf6b73bcb04a1”,example.com从这个字符串里无法获得任何test@gmail.com的个人信息(甚至连邮箱地址也不知道),example.com只知道以后只要使用谷歌登录并返回“cd5f2126c2b2f97ca2d446e52c6ff4baea56fd4bcfcea30afcaaf6b73bcb04a1”这个标识符,那就是我在登录。

显而易见,OpenID是专为登录认证而生,它使用简单,门槛很低,但是如果你想在认证过程中获得用户的其他信息(比如E-Mail)就得多做一步了。
如何在OpenID认证的过程中获得用户的部分信息?

传统的OpenID是做不到这一点的,你只能拿到“唯一标识”。不过新版的OpenID引入了“OpenID attribute exchange”这个概念,这样第三方可以在用户的许可范围内获得用户的部分具体信息。

还是上面的例子,如果example.com告诉Google,我想知道这个用户的E-Mail地址,谷歌就会在授权页面告诉用户:“example.com想知道你的E-Mail地址”,这时如果用户点击同意,example.com就能在回调请求中拿到“test@gmail.com”这个地址。

对于网站能拿到的信息,不同Provider有不同的规定,一般来说包括aim, blog, country, dob (date of birth), email, fullname, gender, icq, image, jabber, language, msn, nickname, phone, postcode, skype, timezone, website, yahoo等等。
那么,OAuth又是怎么认证用户的?

与OpenID相比,网站想接入OAuth要稍微麻烦点,网站需要先创建应用,拿到Key和Secret,才能接入Provider。

OAuth的授权过程并不是身份认证的过程,这一点需要特别清楚,网站走完OAuth流程并拿到用户的授权token后还需要通过token调用相应的用户信息接口才能获得“唯一标识”,举个例子:

我想通过新浪微博登录example.com,example.com要先把我redirect到新浪微博的授权页面,我通过微博帐号登录并授权后,页面跳回example.com,example.com拿到我的访问token后还要再调用一个接口来获得我的新浪会员UID,这个UID就是新浪用户的“唯一标识”了。

可以看出,OAuth相对于OpenID最大的区别就是,网站实际上是拿到了你的帐户访问权限继而确认你的身份,这是一个安全隐患,因为网站在拿到你的“唯一标识”的同时还拿到了一把你的账户的“临时钥匙”。至于网站会不会拿这把钥匙“干坏事”,这个只有站长心里清楚。同时OAuth还比OpenID多了几个额外的请求步骤,登录所费时间一定是长于OpenID的。

大多数的网民是没有这种意识的,他们对“通过XX登录”的认证过程中的提示早已视而不见:

有多少人真正注意过左边的文字?

豆瓣写的更清楚,XXX应用“希望操作你在豆瓣上的数据”而不是“希望使用你的豆瓣账号来登录XXX”
国内外主要服务商认证方式对比
提供商 认证方式 认证后网站获得的权限 安全程度
Google OpenID + OAuth 如果使用OpenID,网站无法获得任何额外权限(包括获得你的Google账户名称),如果使用OAuth,网站须明确说明需要访问哪些服务的权限并经过用户逐项同意 高
Facebook OAuth 默认授权情况下只能读取你的公开信息(不包含E-Mail地址),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
QQ空间 OAuth 默认授权情况下只能读取你的公开信息(不包含QQ号),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
新浪微博 OAuth 默认授权情况下可以获得你的所有信息(私信及身份证号、姓名等除外),并可以你的身份操作绝大多数微博功能 低
Windows Live OAuth 默认授权情况下只能读取你的“唯一标识”,如果网站需要更高级权限需要明确声明并经过用户逐项同意,默认情况下基本类似于OpenID 高
腾讯微博 OpenID + OAuth 如果使用OpenID,网站无法获得任何额外权限,如果使用OAuth,默认会获得用户所有操作的权限,除非应用明确声明只需要部分权限… 使用OpenID时,高使用OAuth时,中
搜狐微博 OAuth 默认授权情况下可以获得你的绝大多数信息,并可以你的身份操作绝大多数微博功能 低
网易微博 OAuth 默认授权情况下可以获得你的绝大多数信息,并可以你的身份操作绝大多数微博功能 低
百度 OAuth 默认授权情况下只能读取你的公开信息(UID、百度帐户名),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
人人 OAuth 默认授权情况下只能读取你的公开信息(UID、好友关系等),如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
开心网 OAuth 默认授权情况下只能读取你的公开信息,如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
来总结一下吧

总体来说,国外的网站都比较正规,第三方网站几乎无法获得任何私人信息,而国内网站对个人信息的保护水平高低不齐,某些网站甚至没有任何保护,新浪微博等网站万 能 钥匙式的“第三方接入”,用一句话来说,不管你敢不敢用,我反正是不敢用

分享到:
评论

相关推荐

    第三方单点登录Ecology方案

    "第三方单点登录Ecology方案"是针对这种技术的具体实施方案,旨在构建一个统一的、安全的用户登录体验。以下是对这一方案的详细解读: 1. **概念理解**: - **单点登录(Single Sign-On,SSO)**:SSO允许用户在一...

    针对近期“博全球眼球OAuth漏洞”的分析与防范建议

    - **安全性和便捷性**:OAuth通过提供一种更加安全的方式来让人们授权第三方应用访问其个人数据。这一过程不仅确保了安全性,还简化了用户的时间成本。 - **功能实现**:第三方应用可以通过用户的授权访问特定网站上...

    单点登录系统

    1. OAuth协议:主要用于网站间的外部认证,比如Google Account、Facebook Connect和新浪微博等,允许用户授权第三方应用访问他们的账户信息。 2. Passport机制:适用于同一组织内部的不同应用,例如Google Account...

    数据库审计 Android应用安全开发 - php.zip

    在Android开发中,这可能包括分析代码漏洞、评估第三方库的安全性、考虑数据传输安全等。对于数据库,风险评估可能关注数据的敏感性、备份策略和恢复能力等。 结合上述知识点,我们可以看出,无论是Android应用开发...

    Python技术安全性与漏洞预防.docx

    遵循最佳实践,避免使用已知不安全的函数和库,及时更新 Python 解释器和第三方库,编写健壮的代码,并进行严格的代码审查,这些都能有效减少安全漏洞。 总的来说,Python 的安全性需要开发者全面考虑,从代码编写...

    行业分类-设备装置-用于云计算平台安全性的认证和授权方法.zip

    5. **安全协议**:如OAuth(开放授权)和OpenID Connect用于安全地授权第三方应用访问用户资源,而SSL/TLS协议确保传输过程中的数据加密,防止中间人攻击。 6. **云安全标准和认证**:为了提高云服务的安全性,有多...

    网页自动认证

    OAuth主要用于授权,允许用户授权第三方应用访问其数据,而OpenID Connect则是在OAuth基础上添加了身份验证层,用于确认用户身份。 3. **Cookie与Session**:在实现网页自动认证中,Cookie和Session是关键。Cookie...

    AutoLogin-1.1-20060118_1.42-源码.rar

    4. **OAuth或OpenID Connect**:对于多平台应用,可能使用OAuth或OpenID Connect这样的授权协议,允许用户通过第三方账户(如Google、Facebook等)进行登录,这些服务提供商负责验证用户身份,简化登录流程。...

    高仿qq(登陆、好友、聊天、空间)

    2. 认证机制:可以采用OAuth或OpenID等认证协议,确保用户身份的安全性,同时提供第三方登录选项。 3. 记住密码与自动登录:利用本地存储(如Web的localStorage或App的SharedPreferences)实现,但需注意安全策略,...

Global site tag (gtag.js) - Google Analytics