
你可能已经猜到了,没错,我就是玩Pokémon Go的那类人。或者,就像最近经常发生的那样,没在玩Pokémon Go。这可不妙,因为这也意味着我们家最小的孩子也玩不了。原来,我们俩用的都是Pokémon Trainer Club(PTC)账号,而不是Google账号,现在都无法登录。
这一点很关键,因为我们俩无法“进行身份验证”并登录游戏,正为此感到沮丧;而我丈夫选择使用他的Google账号,所以他并没有遇到同样的问题。
这促使我深入研究了一些技术问题。无论企业推出什么应用,这些问题都值得关注。核心问题在于新的AAA,即API、身份验证和可用性。
有趣的是,这次探究始于我在《福布斯》上读到一篇关于追踪宝可梦的文章,文章讨论的是Pokémon Go中的追踪功能。没错,就是《福布斯》。这款游戏的影响力可见一斑。随后,我又接连读了几篇相关文章。其中一篇推测,追踪功能(至少在最初)之所以失效,是因为某次游戏更新中,向Niantic服务器发出的追踪调用意外漏掉了API密钥。
无论事实是否如此,这样的疏漏确实会导致API无法正常工作。但我始终想不明白:如果我无法登录PTC帐户玩游戏,为什么切换到Google帐户就能轻松登录呢?
API与身份验证之间的关联
于是,我开始在github上四处查找,并仔细研究Pokémon Go API(我更喜欢Java,不过也有Python版本,尽管去折腾),而这终于让我恍然大悟。你看,这些代码库中几乎每个API调用都会处理同一个异常:LoginFailedException。
换句话说,即使只是简单调用接口来查找附近的宝可梦,也可能导致 LoginFailedException。
其实这并不奇怪。单体Web应用通常通过会话来跟踪已通过身份验证的用户,这通常意味着使用一个Cookie,其中包含会话ID或其他令牌。应用在实际执行任何其他操作之前会先检查该令牌(对熟悉相关概念的人来说,这就是有状态架构)。API也没有太大不同,因为每次API调用都必须通过某种方式,确保发起调用的应用(用户)确实有权进行该调用。也就是说,必须先“登录”。

如今,API通常使用API密钥来实现这一点。系统通常会根据用户配置文件检查密钥,以确保调用已获授权。在无状态架构中,每次调用都要检查。这样做有多种原因,包括对调用实施速率限制。这一点非常重要。Apigee《2016 年 API 现状》报告指出,68%的API采用了配额管理(也称为速率限制、计量等)。要实现这一技术机制,首先需要知道过去1分钟、1小时或1天内发出了多少次调用,因此必须在安全的位置跟踪这些数据(以防用户篡改数据,诱使应用在每个时间段内允许更多调用)。
换言之,API需要验证状态和授权,并且可能还要实施速率限制,因此会给身份验证基础设施带来很大负担。这需要处理大量工作。
然而,我们往往仍沿用传统的应用架构思维,没有考虑这些额外调用对容量的影响。即使只是定期发起这些额外的验证和授权调用来“刷新”会话,也会给身份验证基础设施带来巨大压力,而登录功能依赖的正是同一套基础设施。这与浏览器将每位用户的连接数限制从2个提高到8个时出现的压力类似:单个用户访问应用所消耗的资源变成了原来的8倍。同样,在评估依赖每次API调用进行授权的应用所需容量时,也必须计算单个用户的资源消耗究竟会增加多少倍。
如果不这样做,登录服务一旦不堪重负,就会挡在8岁孩子和他们迫切想要捕捉的皮卡丘之间。结果嘛,孩子们会很生气(当然,Lori也会)。
扩展身份识别与访问管理对保障可用性至关重要
身份和访问是关键的应用服务。过去两年的《应用交付现状》调查显示,其重要性日益提升。在不透露过多信息的情况下,我们已经从2017年的数据中看到,身份联合和应用访问控制均呈增长趋势。这不仅是因为应用,也与物联网设备有关。为支持更多物联网设备、更多用户,以及更多通过API与后端应用交互的应用,需要扩展整个身份服务基础设施。
可用性通常仅以停机时间来衡量。 如果服务器已启动并正常运行,就会被视为可用。这是一种由内而外的视角。但与安全性一样,我们需要转变衡量方式,从外部用户的角度审视可用性。容量同样重要,仅仅“已启动”和“可用”还不够。服务必须对所有希望使用它们的用户都保持“已启动”和“可用”。这意味着扩展速度要与python脚本的执行速度一样快。
这还意味着,需要了解真正实现API所提供功能的各类后端服务之间的关系。身份和访问服务对可用性的重要性不亚于应用本身。与安全性一样,可用性取决于最薄弱的环节。如果身份服务的可扩展性不及应用的其他部分(如果采用按API调用进行身份验证的模式,则需要具备更强的可扩展性),那么即使内部所有仪表板都显示“绿色”,可用性仍会成为一个严重问题。
因为从外部来看,我们看到的是“红色”,无论从字面还是比喻意义上都是如此。
关于作者

Lori MacVittie是F5首席技术官办公室的杰出工程师兼首席技术布道师,在应用交付、自动化战略和基础设施领域拥有深厚的专业知识。无论是为AI智能体定义防护机制、剖析脆弱的多云架构,还是探索可扩展系统的极限,她都善于化繁为简。她在应用开发、IT架构以及网络和系统运维领域拥有30多年的行业经验。加入F5之前,她曾担任技术编辑,并因出色表现获得奖项。 MacVittie拥有计算机科学硕士学位,著述颇丰,出版作品涵盖安全、云和企业架构领域。她还热衷于桌面游戏和电子游戏,并且对奶酪有着毫不掩饰的鲜明见解。
Lori Mac Vittie 的更多博客文章相关博客文章
Thingbot正转变为攻击平台
Lori MacVittie重点介绍了F5 Labs对2018年1月至6月全球物联网设备攻击的研究,并指出了其中令人警醒的影响。物联网设备不仅持续遭到利用,还被转变为攻击平台,这意味着攻击者可以更充分地利用这个必然增长的市场。
借助F5全新Quick Start,在AWS上快速开展业务
在AWS re:Invent开幕前,我们很高兴与大家分享F5与AWS之间全新的Quick Start集成。F5的Tom Atkins将介绍该服务如何启动、配置和运行在AWS上部署工作负载所需的计算、网络、存储及其他AWS服务。