OpenID 和 OAuth 有什么区别?

网上查到说 OpenID 是用来验证的,可以用一个 URL 来唯一表明自己的身份(不用挨个记每个网站的用户密码)。OAuth 是用来授权在另外一个网站的数据。但是目前国内新浪微博、豆瓣的 OAuth API 很多都被应用于网站的直接登录?是不是被滥用了?这两者的功能上似乎有重复?
关注者
320
被浏览
43,528

11 个回答

OpenID是Authentication
OAuth是Authorization

前者是网站对用户进行认证,让网站知道“你是你所声称的URL的属主”
后者其实并不包括认证,只不过“只有认证成功的人才能进行授权”,结果类似于“认证+授权”了。OAuth相当于:A网站给B网站一个令牌,然后告诉B网站说根据这个令牌你可以获取到某用户在A网站上允许你访问的所有信息

如果A网站需要用B网站的用户系统进行登录(学名好像叫federated login),它可以
  • 选择OpenID认证,然后通过attribute exchange获取用户的昵称或其他通过OpenID暴露出来的用户属性,或者
  • 选择OAuth认证,获取到token后再用token获取用户昵称或其他允许被访问的信息

关于OAuth的授权,不能说是滥用,是OAuth Service Provider对OAuth的权限没有细分。好比我只需要用户的昵称性别,你却把修改昵称性别的权限也授权给我了(虽然我不一定会去用)。这个错在OAuth Service Provider
OAuth > OpenID 。

举个简单的栗子:收某快递需要提供身份证(好比 OpenID ),而你却顺便带上了自己家的钥匙并交给他(好比 OAuth )……后果不解释。

再举个具体的栗子:现在很多网站都提供了「使用新浪微博快速连接」(也就是 OAuth )作为登录方式。但当你不确定这个网站是否可信时,这样做是危险的(虽然事后可以到新浪微博的设置页面移除)。因为 OAuth 之后,就相当于把你微博的数据(比如看私信)和权利(比如发私信)交给了这个网站,至于网站要做什么你根本不知道。

而 OpenID 只是告诉网站或别人,这个帐号是你而已,并不会也无法提供其它数据。

如果还不太懂我说啥的话,推荐阅读: huoding.com/2010/10/10/