API介绍5:认证(2)

第五章:认证(2)

第四章中,我们提到大多数网站使用用户名和密码作为身份验证的凭证。我们还讨论到重复使用这些凭证访问API是不安全的,所以API通常需要一个和用户登录网站时使用的不同的凭证集合。常见的例子是密钥。本章,我们来看一下另一个解决方案,开放授权(OAuth),这个是目前web上使用最广泛的验证方案。

让生活更简单

是否有被逼完成下面这样的注册表单的经历?


Windows 8 注册表单上的产品密钥

在上面那样的表单域中输入一长串的密钥的用户体验是非常糟糕的。首先,你必须找到需要的密钥。是的,当你买了软件之后,它就会发送到你的收件箱里,但是一年之后呢,要找到它就很麻烦了(是从哪个邮箱发过来的?我是用哪个邮箱注册的?!)找到之后,你必须准确无误的输入这个可恶的东西——打字错误或遗漏某个字母就会得到一个错误的结果,甚至导致你还没有注册的软件被锁定!

强制用户使用API密钥的体验同样糟糕。输入错误的问题非常常见,并且它要求用户手工完成客户端和服务器之间的部分设置。用户必须从服务器获取密钥,然后给予客户端。由于工具就意味着它应该可以自动工作,所以肯定还有更好的方案。

开始OAuth。OAuth解决的主要问题就是自动完成密钥的交换。它提供了一个标准的方法,用户通过简单的几个步骤就可以让客户端从服务器获取一个密钥。从用户的角度来看,所有的OAuth都需要输入凭证。而客户端和服务器在幕后进行工作,使客户端获取一个有效的密钥。

目前OAuth有两个版本,它们都有一个恰当的名字OAuth 1和OAuth 2。要在和API通信的过程中使用它们进行身份认证,就有必要理解每个版本的步骤。因为它们使用相同的工作流,我们会讨论OAuth 2的步骤,然后指出OAuth 的不同之处。

OAuth 2

我们首先需要了解OAuth交换过程中涉及的角色组件:

用户 — 希望连接两个网站的人

客户端 — 被授权访问用户数据的网站

服务器 — 拥有用户数据的网站

接下来,我们需要给出一个简单的免责声明。OAuth 2的一个目标是允许业务修改认证过程适应自己的需要。由于这种天生的可扩展性,API可以使用略有差异的步骤。下面展示的是一个基于web的应用的常见工作流。手机和桌面应用的流程可能有轻微的差别。

这里就是OAuth 2的步骤。

  1. 用户告诉客户端去连接服务器


    ch5-1.gif

    用户通过告诉客户端他希望客户端连接服务器来开始这个流程。通常是以点击一个按钮开始。

  2. 客户端将用户重定向到服务器


    ch5-callback-url.gif

    客户端转到服务器的网站,同时携带一个URL,服务器通过该URL转回用户认证的网站,这个URL叫做回调URL。

  3. 用户登录到服务器,授权客户端访问


    ch5-2.gif

    用户使用他们的用户名和密码进行服务器认证。服务器现在可以确定它的一个用户请求给予客户端访问这个用户的账户和相关数据的权限。

  4. 服务器将用户转到客户端,同时携带认证代码


    ch5-3.gif

    服务器将用户转到客户端(返回到步骤2的回调URL)。在响应中隐藏着给客户端的一个唯一的认证代码。


    ch5-code.gif
  5. 客户端使用认证代码+密钥向服务器交换访问令牌
    客户端使用它收到的认证代码创建另一个发送到服务器的请求。请求中包括客户端的密钥。当服务器看到一个有效的认证代码和一个受信任的客户端密钥,它确定客户端就是它所宣称的那个,并且现在它代表一个真正的用户。服务器在响应中返回一个访问令牌。


    ch5-access-token.gif
  6. 客户端从服务器获取数据


    ch5-4.gif

    到这个时候,客户端可以代表用户访问服务器。步骤6中的访问令牌本质上就是服务器上用户的另一个密码。客户端在每一个请求中都包括访问令牌,所以它可以直接和服务器进行认证。

客户端刷新令牌(可选)

OAuth 2引入的一个特性就是让访问令牌过期。这种安全性的增强有助于保护用户的账户——令牌过期的时间越短,被盗的令牌可能被恶意使用的时间也就越短,类似于信用卡号码过一段时间就过期。令牌的有效期是由服务器设置的。API可以在几个小时到几个月的时间里自由使用所有资源。一旦有效期结束,客户端必须向服务器申请新的令牌。

OAuth 1 有什么不同

OAuth版本之间有几个主要的区别。其中一个我们已经提过了,访问令牌不过期。

另一个区别是OAuth 1包括了一个额外的步骤。在上文的步骤1和2之间,OAuth 1需要客户端向服务器申请一个请求令牌。这个令牌充当了 OAuth 2 中认证代码的角色,用来交换访问令牌。

第三个区别是OAuth 1需要数字签名。我们会跳过签名如何工作的细节(你可以找到做这个工作的代码库),但是知道为什么一个版本有签名而另一个版本没有还是值得的。请求签名可以保护数据在客户端和服务器之间移动时不会被篡改。签名允许服务器核实请求的真实性。

然而,现在大部分API传输都发生在一个安全的通道上(HTTPS)。认识到这一点之后,OAuth 2取消了签名从而使得版本二更容易使用。取而代之的是OAuth 2依赖于其他的方法来保证传输的数据的安全。

授权

OAuth 2中另一个需要特别注意的概念是限制访问,正式名称叫做授权。返回到第2步,当用户点击按钮允许客户端访问的时候,隐藏在下面的是客户端请求的具体权限。这些权限称为范围,是OAuth2的另一个重要特色。它们为客户端提供了一个方法,客户端可以请求访问用户数据的受限权限,这样用户更容易信任客户端。

范围的强大之处在于这种限制是基于客户端的。API密钥则不同,它的限制是基于密钥的,导致所有客户端都是相同的,OAuth范围允许一个客户端拥有权限X,另一个客户端有权限X和Y。这就是说一个网站可以查看你的通讯录,而另一个网站可以查看也可以编辑。

译自

Chapter 5: Authentication, Part 2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 转载本文需注明出处:微信公众号EAWorld,违者必究。 本文目录: 一、单体应用 VS 微服务 二、微服务常见安...
    72a1f772fe47阅读 8,530评论 3 25
  • 本文目录:一、单体应用 VS 微服务二、微服务常见安全认证方案三、JWT介绍四、OAuth 2.0 介绍五、思考总...
    挨踢的懒猫阅读 17,946评论 5 29
  • 1. 微服务架构介绍 1.1 什么是微服务架构? 形像一点来说,微服务架构就像搭积木,每个微服务都是一个零件,并使...
    静修佛缘阅读 6,628评论 0 39
  • 主要特点 Proxy代理 不再使用 defineProperty(getter/setter)监听对象单个属性,性...
    李霖弢阅读 208评论 0 0