不知道什么时候开始,我们已经习惯了点击“用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 默认授权情况下只能读取你的公开信息,如果网站需要更高级权限需要明确声明并经过用户逐项同意 高
来总结一下吧
总体来说,国外的网站都比较正规,第三方网站几乎无法获得任何私人信息,而国内网站对个人信息的保护水平高低不齐,某些网站甚至没有任何保护,新浪微博等网站万 能 钥匙式的“第三方接入”,用一句话来说,不管你敢不敢用,我反正是不敢用
相关推荐
分析了Web2.o的安全漏洞和安全威胁,介绍了两个开放式的身份认证协议即openID和oAuth,并 建议结合openID和oAudl来保护web2.o中的网络资源,防止网络资源遭到有意或无意的滥用。
OpenID是一个开放式标准,它主要描述了在用户在分布式系统的认证方式以及提供了一套额外的服务系统允许用户方便...OAuth协议最初的出现是为了解决不同网站和其他互联网服务商访问受保护的资源这个普遍性问题而设计的。
着重分析结合使用OpenID和OAuth两个开放协议进行用户信息安全授 权的过程,并列举了可能出现的风险和防范方法。
OpenID与OAuth协议详,很好的文档哦,请支持下载
这个是我在公司内部公开讲座给大家介绍的OpenID和OAuth相关的PPT文档,对于了解OpenID和OAuth还是有一些帮助的。
DotNetOpenAuth.WebAPI, 用于 ASP.NET WebAPI (OpenID/OAuth/OAuth2)的DotNetOpenAuth DotNetOpenAuth.WebAPI用于 ASP.NET WebAPI (OpenID/OAuth/OAuth2)的 DotNetOpenAuth 命令行目这个项目是为了探索我们可以将...
授权服务器兼容OAuth 2.0和OpenID Connect(OIDC)的授权服务器,仅用于演示目的,可用作OAuth2 / OIDC研讨会的一部分。目标此授权服务器应... 作为开源免费提供支持学习OAuth2 / OpenID Connect的努力(自学或作为...
通过点击viewbutton获取用户openid,实现方式oauth2.0认证
微信登录For ASP OAuth2.0接口 获取 OpenId Access_Token 头像 昵称 性别等信息
IdentityServer4, OpenID连接和用于 ASP.NET 内核的OAuth 2.0框架 关于 IdentityServer4 IdentityServer是一个免费的开源 OpenID连接插件和的OAuth 2.0插件框架,用于 ASP.NET 内核。 通过使用和 Brock Allen 创建和...
OpenID Connect providers. It strives to directly map the requests and responses of those specifications, while following the idiomatic style of the implementation language. In addition to mapping the ...
THINKPHP最全第三方登录(包括腾讯QQ、微信、新浪微博、Github、淘宝网、百度、搜狐微博、人人、360、网易等等) 使用方式: 1、使用命名空间 use Org\ThinkSDK\ThinkOauth; 2、设置三方登录的类别并赋予一个变量 $...
支持的协议:OpenID,OAuth 1.0和OAuth 2.0。 EAuth是提供统一(不依赖于所选服务)方法来验证用户身份的扩展。 该扩展本身不会执行登录,不会注册用户,也不会绑定来自其他提供商的用户帐户。 为什么要拥有扩展名...
使用asp开发的微信登录-Oauth2.0获取用户openid、头像、昵称等相关信息,用于公众号相关应用开发。
应用签名:可在微信开发平台的资源中心》》资源下载》》中下载“签名生成工具”,用户获取已经安装到手机的第三方应用的签名。输入应用包名,即可获得该应用的签名值。 3.提交审核后,在7个工作日内腾讯将给出审核...
ORY Hydra是经过强化,经过OpenID认证的OAuth 2.0服务器和OpenID Connect提供商,针对低延迟,高吞吐量和低资源消耗进行了优化。 ORY Hydra不是身份提供者(用户注册,用户登录,密码重置流程),而是通过登录和同意...
一份关于OAuth的ppt,内容较为详尽,来源于网络.
微信登录For ASP OAuth2.0接口 获取 OpenId Access_Token 头像 昵称 性别等信息
aerogear-ios-oauth2, oauth2/openid连接的客户端库 aerogear-ios-oauth2 基于 aerogear-ios-http的OAuth2客户端。项目信息许可证:Apache许可,版本 2.0生成:CocoaPodsLangu