Alice是Google的用户,Alice想使用“网易印像服务”将她的部分照片冲印出来,她怎么做呢?Alice可以将Google用户名和口令告诉“网易印像服务”,但存在这些问题:“网易印像服务”可能会缓存Alice的用户名和口令,造成口令泄露。“网易印像服务”可以访问Alice在Google上的所有资源,Alice无法对它们进行最小的权限控制,比如只允许访问某一张照片,1小时内访问有效。Alice无法撤销授权,除非Alice更新口令。
开放授权(OAuth 2.0)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片、视频、联系人列表),而无须将用户名和口令提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和口令来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如,仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。
OAuth的参与实体至少有如下三个。
•RO(Resource Owner):资源所有者,对资源具有授权能力的人,如上文中的用户Alice。
•RS(Resource Server):资源服务器,它存储资源,并处理对资源的访问请求,如Google资源服务器,它所保管的资源就是用户Alice的照片。
•Client:第三方应用,它获得RO的授权后便可以去访问RO的资源,如“网易印像服务”。
此外,为了支持开放授权功能以及更好地描述开放授权协议,OAuth引入了第四个参与实体。
•AS(Authorization Server):授权服务器,它认证RO的身份,为RO提供授权审批流程,并最终颁发授权令牌(Access Token)。注意,在物理上,AS与RS的功能可以由同一个服务器来提供服务。
协议的基本流程如下。
(1)Client→RO:Client请求RO的授权。请求中一般包含要访问的资源路径、操作类型、Client的身份等信息。
(2)RO→Client:RO批准授权,并将“授权证据”发送给Client。至于RO如何批准,这个是协议之外的事情。典型的做法是,AS提供授权审批界面,让RO显式批准。(www.daowen.com)
(3)Client→AS:Client向AS请求“访问令牌(Access Token)”。此时,Client需向AS提供RO的“授权证据”,以及Client自己身份的凭证。
(4)AS→Client:AS验证通过后,向Client返回“访问令牌”。
(5)Client→RS:Client携带“访问令牌”访问RS上的资源。在令牌的有效期内,Client可以多次携带令牌去访问资源。
(6)RS→Client:RS验证令牌的有效性,比如是否伪造、是否越权、是否过期,验证通过后,才能提供服务。
第三方网站使用QQ登录获取昵称和头像是使用OAuth的实例,步骤如下。
(1)网站上设置QQ登录入口。网站开发者可以在自己的网站首页入口和主要的登录、注册页面上放置“QQ登录”标识。
(2)用户选择用QQ账号登录,弹出QQ登录的窗口,在登录窗口中将显示网站自己的Logo标识、网站名称以及首页链接地址。如果用户已登录QQ软件,就不用重复输入账号密码,可以一键实现快速登录。
(3)用户授权。用户首次使用“QQ登录”成功登录网站后,将出现授权对话框,用户可以选择授权允许网站访问自己的相关信息,如访问个人基础信息昵称和头像等。
(4)登录和授权完成后,跳转回网站。如果用户成功登录并授权,则跳转到指定的回调地址,该回调地址由第三方网站自行配置,回调地址通常设置为网站首页或网站的用户中心。
(5)获取并存储access token以及openid。成功登录后,即可发送请求来获取access token以及openid,access token用来判断用户在本网站上的登录状态,具有一定有效期,用户再次登录时自动刷新,openid是此网站上唯一对应用户身份的标识,网站可将此标识进行存储以便用户下次登录时辨识其身份,或将其与用户在网站上的原有账号进行绑定。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。