认证(authentication)与授权(authorization)是计算机安全方面的两个基础概念。认证解决你是谁的问题 (who),授权解决你能干什么的问题 (what)。例如你要登陆论坛,输入用户名张三,密码1234,密码正确,证明你张三确实是张三,这就是 authentication;登陆后check后用户张三是个版主,所以有权限加精删别人帖,这就是 authorization。
日常中我们经常用到的就是用OpenID解决跨站点的认证问题,OAuth解决跨站点的授权问题。
OpenID与OAuth
OpenID是一个去中心化的网上身份认证系统。对于支持OpenID的网站,用户不需要记住像用户名和密码这样的传统验证标记。取而代之的是,他们只需要预先在一个作为OpenID身份提供者(identity provider, IdP)的网站上注册。OpenID是去中心化的,任何网站都可以使用OpenID来作为用户登录的一种方式,任何网站也都可以作为OpenID身份提供者。OpenID既解决了问题而又不需要依赖于中心性的网站来确认数字身份。而OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
OAuth流程:
·用户访问客户端的网站,想操作用户存放在服务提供方的资源。
·客户端向服务提供方请求一个临时令牌。
·服务提供方验证客户端的身份后,授予一个临时令牌。
·客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
·用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
·授权成功后,服务提供方引导用户返回客户端的网页。
·客户端根据临时令牌从服务提供方那里获取访问令牌。
·服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
·客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
这样说可能比较难以理解,举个例子。
1.当你点开微博登录的链接,淘宝就跳到微博登录页面,问你是不是那个微博用户,是的话你用你的账号密码去登录,你先去给微博验明正身,是的话再来找我。
2.输入账号跟密码,如果可以登录说明你这个身份是对的,通过了微博的验证后微博就告诉淘宝说,没错没错,我家里确实有么这个家伙。
上面这些都是OpenID的责任,而且OpenID也只做这件事,就是前面说的是不是
然后呢,淘宝就说好好,有你微博验证我放心,于是就让我通过了
等等,这时淘宝只知道微博他们家有我存在,但是并不知道我在微博家里叫什么名,做过什么事,其实淘宝也不应该知道,对吧,要是知道我在微博家老是到处举报别人卖假货坑顾客什么的,那我让你进我大淘宝岂不是会坏了我的大事,你丫是来捣乱的吧(至于淘宝为什么会这么想,哼哼~你们懂的)。
所以,淘宝通常就会做一件事,什么事呢?这时就轮到OAuth出场了,淘宝在把我交给微博验明正身的时候其实还“忽悠“了我,明明只是验个身份,却问我要不要把我在微博家叫什么名做过什么事也告诉它(就是通常看到的几个打勾选项:允许访问我的昵称/允许访问我的头像等等)。淘宝说这样就可以为我提供更多的服务,什么服务呢?模凌两可,我呢看到有更多服务也没多想就打勾了,不要白不要是吧。类似的很多网站都提供了「使用XX账号快速登录」(也就是 OAuth )作为登录方式。但是大多数人可能都不知道这背后涉及安全隐患。原本OpenID和OAuth完全是为了两种不同的需求而生,OpenID的目标是为了帮助网站确认一个用户的身份,OAuth的目标是为了授权第三方在可控范围下访问用户资源.但是当你选择用XX账号快速登录的时候,就相当于把你XX账户的数据(比如看私信)和权利(比如发私信)交给了这个网站,这样做是危险的(虽然事后可以到XX的设置页面移除)。因为 OAuth 之后,网站要做什么你根本不知道。所以当你不确定这个网站是否可信时,尽量不要使用这种登录方式.
版权所有 Copyright © 2003 - 2014 www.hxhuo.com All Rights Reserv ed 会心火信息 专家-厦门会 心 信息科技 有限公司 闽ICP备10202970号-23