API测试最佳实践 - 身份验证
适用等级:高级
1. 概况
身份验证通常被定义为是对某个资源的身份的确认的活动,这里面资源的身份指代的是API的消费者(或者说是调用者)。一旦一个用户的身份验证通过了,他将被授权访问那些期待访问的资源或API。
验证(Authentication)- 指的是对API最终使用者的确认的活动。
授权(Authorization)- 指对那些验证通过的用户能所能够访问的资源进行确认的活动。

2. 身份验证的标准(Authentication Standars)
身份验证的标准和技术太多了,比如,
2. 1 基于表单的验证(Form Based)
基于Web/HTML的身份验证通常适用HTTP Cookie。
2.2 Basic/Digest/NTLM身份验证
这种身份验证方式使用HTTP头来鉴别用户。
2. 3 WS-Security SAML and Username Tokens
基于SOAP/XML的身份验证方式是通过在SOAP的消息头传递凭证实现的,同时你也可以对该凭证信息进行签名或加密,当然这个过程不是必须的,可选的。
2.4 API关键字(API Key)
每一个API的请求都包含一个唯一标识用户的关键字。
2.5 OAuth 1.x/2
基于HTTP的交互和工作流,授权对资源的使用,如API、Web等。
OAuth包括了一个间接进行身份验证的步骤,但是并没有宣布这个验证要如何进行。
当你的身份验证以来于凭证或者关键字,并且通过HTTP传输,那么你就要小心了。
因此为了避免潜在的攻击者偷听或窃取你得身份信息,你应该强迫自己使用HTTP/SSL而不是未加密的HTTP请求。
当你考虑测试API的身份验证的时候,这方面有很多最佳实践供你选择。
这些最佳实践除了与通用的测试管理相关,还有关于通身份验证测试技术。
3. 集中并且安全存储身份凭证信息
如果你的测试用例脚本包含用户身份凭证信息或者包含访问限制的令牌,那么你就必须考虑集中存储这些信息,并且能够使该信息被轻松及安全的修改,就算其他人能够访问你的测试脚本但也不见得就能读取用户的身份凭证或访问令牌信息。另外,也要确保这些信息不会在日志文件或者测试报告文件中出现:比如你有一个验证用户登陆的测试用例,那么就别把用户名和密码都输出来,至少得做些“手脚”掩盖一下吧。
(我至今还没发现哪个项目组对于用户名和密码有转义、加密或编码的,能完全遵守这条的请护住你的脸~~)
4. 像真实世界的用户一样进行身份验证
不管是作为演示,还是测试环境做测试,都别创建超级用户(超级用户指权限很高的用户)进行登陆或访问关键字身份验证(对于API接口来说)。如果按接下来的方式进行测试,那这种测试绝对是不可信的;没有跟你的实际用户一样使用相同的身份验证机制,就不能发现相应的问题,例如回话过期,未授权访问错误,或者身份验证流程本身存在的错误等。因此,如果具有可行性,请确保你对系统身份验证的方式与现实中的用户保持一致;千万被给你的测试用例或脚本留下后门和隐患。
5. 考虑创建负面测试
你当然也要确保拥有一些身份验证和授权验证相关的测试用例。比如:
- 输入无效的用户名和密码。
- 试图在没有身份凭证信息的情况下访问受保护的内容(或资源)。
- 尝试使用无效的身份凭证或会话令牌。
- 锁住一个账户,然后验证这个锁定逻辑或时间段被强制执行了。
- 尝试通过不安全的信道发送(无效或非法)的凭证信息,如使用HTTP而不是HTTPS,未加密的的XML或JSON等等。
任何一个负面的测试用例,都应该验证响应信息,或者返回报文里所包含的响应的错误代码,但是对于客户来说没啥有用的信息返回给他,因此他不能把系统怎么地。例如,一个失败登陆尝试应该被粉饰一下,如果输入的用户名已经在系统中注册过了。
6. 心里时刻想着设计关于身份验证的测试用例
当你设计测试用例的时候,有若干技术能够使身份验证相关的流程更加简便:
- 模块化你得测试用例 - 如果可行,把你每一个流程里的用来进行身份验证的测试用例、代码或脚本放到一个共享的测试脚本或测试用例李米娜,通过其他的测试用例调用。这样,你就能很容易的修改和维护,尤其是底层的技术或需求变化的时候。
- 参数化环境配置 - 如果你的测试用例支持不同的测试环境,(dev/test/stagin/production/etc)- 确保你的测试用例很容就能在各环境之间切换。
- 使用数据驱动的技术 - 对于运行大量的用户身份的测试用例,请使用数据驱动的技术(啥是数据驱动,不需要我解释吧?简单来说就是数据是变化,代码逻辑是不变,你看到是传入的数据和输出的结果。)这么做也是为了在考虑访问控制的情况下所有的数据请求都被正确接收和处理。
7. 也别忘了跑跑性能与压力测试
以上的任意一个测试用例都应该作为负载测试跑一跑,确保一个API的身份验证机制在极端压力下依然正常工作(这也是黑客最常用的手段)。如果有问题,可能跟错误的线程管理有关,数据库连接共享有关等等。如果(没有如果)可能,考虑组合多种不同的身份验证的测试用例,例如,为了获取很挫的错误信息,同时运行负面的身份验证相关的测试用例以及授权相关的测试用例。
API测试最佳实践 - 身份验证的更多相关文章
- [翻译] API测试最佳实践 - 身份验证(Authentication)
API测试最佳实践 - 身份验证 适用等级:高级 1. 概况 身份验证通常被定义为是对某个资源的身份的确认的活动,这里面资源的身份指代的是API的消费者(或者说是调用者).一旦一个用户的身份验证通过了 ...
- [翻译] API测试最佳实践 - 组织你的测试
组织你的测试 适用级别:初学者 在最底层,一个测试步骤(Test Step)用来验证一个单独的操作.组合若干测试步骤到测试用例,允许你验证那些被分隔出来的一个一个的功能,这些功能是应用程序所需要的.接 ...
- RESTful API 设计指南,RESTful API 设计最佳实践
RESTful API 设计指南,RESTful API 设计最佳实践 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). ...
- (转)RESTful API 设计最佳实践
原文:http://www.oschina.net/translate/best-practices-for-a-pragmatic-restful-api 数据模型已经稳定,接下来你可能需要为web ...
- RESTful API 设计最佳实践
背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...
- ****RESTful API 设计最佳实践(APP后端API设计参考典范)
http://blog.jobbole.com/41233/ 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而 ...
- RESTful API 设计最佳实践(转)
摘要:目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API ...
- RESTful API 设计最佳实践(转)
背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的 ...
- RESTful API 设计最佳实践【转】
背景 目前互联网上充斥着大量的关于RESTful API(为了方便,后面API和RESTful API 一个意思)如何设计的文章,然而却没有一个“万能”的设计标准:如何鉴权?API格式如何?你的API ...
随机推荐
- javac 不是内部或外部命令 和 错误 找不到或无法加载主类 的解决方法
使用package语句与import语句. 实验要求:按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及自定义包中的类.掌握一些重要的操作步骤. 代码: 模板1: ...
- 如何用LOTO示波器安全的测量高电压?
本文里我们把几十伏以上,超出对人体安全电压或者超出示波器量程的电压定为高电压,以220V市电举例讨论. 示波器上是有方便自测和探头补偿用的标准方波的,一般是1K Hz.我们的USB示波器上也有这个标准 ...
- 巧用Python快速构建网页服务器
经常做web开发,要调试一个网页,直接打开文件,用file模式显然是业余的. 但动辄要部署个IIS或APACHE站点,也确实太累,怎么办? 逐浪君此前有分享过通过http-server来构建快速的we ...
- Linux——搭建FTP服务
一.FTP基本概念: 1.FTP的作用: 实现文件系统的安全匿名访问:包括上传.下载和查看,可以应用于Windows和Linux系统 2.FTP的工作原理 server与client都支持ftp传输协 ...
- b站个人直播年报【大爽歌作】 介绍与演示
大家好,我是大爽,一个b站UP主兼主播. 最近做了一个b站直播个人年报,该年报为代码文件生成. 且代码已打包到一个可视化工具中(exe)只需两步就可以获得自己的专属年报. 代码已上传到我的github ...
- python openpyxl、RESTful、Webservice接口 基础知识
最近 在做接口测试的时候,遇到如下问题:如何通过数据驱动去做批量接口测试呢,我们的测试数据放在哪里去维护?下面整理出相关点,供大家参考 1.如何维护接口测试数据:放在excel文件中,通过python ...
- eclipse下的python环境安装
添加python开发环境到eclipse: 点击help--install New Software 点击add,弹出新窗口: Name:填PyDev Location:填 http://pyde ...
- 线性规划之单纯形算法矩阵描述与python实现
声明 本文为本人原创,转载请注明出处.本文仅发表在博客园,作者LightningStar. 问题描述 所有的线性规划问题都可以归约到标准型的问题,规约过程比较简单且已经超出本文范围,不再描述,可以参考 ...
- [nowcoder5668I]Sorting the Array
令$f(n,b,m)=a[1..n]$(这里下标从1开始),考虑一些性质: 性质1.对于$\forall 1\le i\le n-m+1$,若$\exists 1\le j<i,a[j]> ...
- Python学习手册——第二部分 类型和运算(1)之字符串
Python全景 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. 在python中数据是以对象的形式出现的!!! 为什么使用内置类型 内置对象使程序更容易编 ...