一、什么是鉴权?
鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就是一个门禁,您想要进入室内,必须通过门禁验证身份,这就是鉴权,如打开一个网站必须要输入用户名和密码才可以登录进入,这种就是鉴权,还有一些业务需要登录以后才可以进行,因为需要token值,则就可以把token添加到鉴权中,这种也是鉴权。
二、postman鉴权方式
postman 支持多种鉴权方式,如图
Inherit auth from parent:从父级继承身份验证,是每个请求的默认选择 。这是一个很有用的功能,当我们对一个集合(collection)进行测试的时候,集合中的每个请求都需要获取token,那么如果我们在集合的根目录把token获取到的话,那么该集合下的所有请求就会自动获取到token,无需任何处理(因为每个请求的Authorization默认选项就是Inherit auto from parent),也就省略了我们对每个token进行处理了
实现步骤:
- 选中一个集合进行编辑,切换到Pre-Request Script.在这里请求登录接口 ,将返回的token值拿到,然后保存成全局变量 。
- 切换到Authorization选项卡,在这里直接获取token 。这里的获取token需要根据具体的项目 。比如我们所测试的项目正好是Bearer token这种形式 。直接在列表中使用这种方式输入{{token}}即可。
- 向集合添加请求,无需进行token处理,所有接口都能请求成功 。
Bearer Token :承载令牌,一般也叫 Json web token,就是发送一个 json 格式的 token 令牌,服务端会针对 token 进行解密验证,令牌是文本字符串,包含在请求标头中。在请求授权选项卡中,从类型下拉列表中选择承载令牌。在“ 令牌”字段中,输入您的API密钥值,或者为了增加安全性,将其存储在变量中并按名称引用该变量。如下图
postman会将令牌值以要求的格式附加到请求header的文本“ Bearer”上,如下所示:
- No Auth:表示不需要身份认证
- API key:也有很多系统是通过这种认证方式,更多的是系统自定义的认证方式,比如在请求头添加 model: data xxx-xxx-xxx-xxxx
- Basic Auth:基础验证,提供用户名密码验证,postman 会自动生成 authorization,属于最常用鉴权方式,如图:在请求授权选项卡中,从类型下拉列表中选择基本身份验证,在“ 用户名”和“ 密码”字段中输入您的API登录详细信息-为了提高安全性,您可以将其存储在变量中,如图:
在请求标头中,您将看到正在向Authorization标头传递一个表示您的用户名和密码值的Base64编码的字符串,该字符串附加到文本“ Basic”中,如下图所示
- Digest Auth:摘要式认证。在基本身份认证上面扩展了安全性,服务器为每一个连接生成一个唯一的随机数,客户端用这个随机数对密码进行 MD5 加密,然后返回服务器,服务器也用这个随机数对密码进行加密,然后和客户端传送过来的加密数据进行比较,如果一致就返回结果,他是一个二次验证过程,会有两次认证交互消息,客户端请求资源->服务器返回认证标示->客户端发送认证信息->服务器查验认证,如下图示:
Digest Auth下面的高级字段是可选的,postman会在请求运行时自动填充它们。
- OAuth:一般用于第三方身份认证,在不公开密码的情况下客户端应用程序可以访问第三方API提供的数据,有1,2两个版本,需要提供的信息不太一样。也是常用的鉴权方式,如下图
OAuth1.0:输入必填参数 消费者密钥、消费者密钥值,访问令牌和令牌密钥值。Postman会尝试自动完成高级参数填充,当前你也可以自己填写
然后可以在左侧的Add authorization data to的下拉列表中选择在请求头、URL还是请求体中传递身份验证详细信息,这个身份验证信息数据在哪里传递取决与请求类型,一般post或put请求就是添加到body里面,如果是get请求就会添加到URL里面
OAuth2.0:也可以在左侧的Add authorization data to的下拉列表中选择在请求头还是URL中传递身份验证详细信息
然后在Configure New Token里面配置相关信息得到新令牌,需要输入客户端应用程序的详细信息,以及服务提供商提供的所有身份验证详细信息
请求新访问令牌的参数是根据Grant Type类型来的:Grant Type类型如下
请求新访问令牌的参数的完整列表如下:
1)令牌名称:您要用于令牌的名称。
2)授予类型:选项的下拉列表-这将取决于API服务提供商的要求。
3)回调URL:身份验证后重定向到的客户端应用程序回调URL,应在API提供程序中注册。如果未提供,Postman将使用默认的空URL并尝试从中提取代码或访问令牌-如果此方法不适用于您的API,则可以使用以下URL:https://www.getpostman.com/oauth2/callback
4)身份验证URL: API提供程序授权服务器的端点,用于检索身份验证代码。
5)访问令牌URL:提供商的身份验证服务器,用于交换访问令牌的授权代码。
6)客户端ID:您在API提供商处注册的客户端应用程序的ID。
7)客户端机密: API提供商提供给您的客户端机密。
8)范围:您所请求的访问范围,其中可能包含多个以空格分隔的值。
9)状态:不透明的值,以防止跨站点请求伪造。
10)客户端身份验证:一个下拉列表-在标头中发送基本身份验证请求,或在请求正文中发送客户端凭据。升级到新版本后,请更改此下拉菜单中的值,以避免客户端身份验证出现问题。
配置完成后,点击Get New Access Token按钮。如果您成功从API接收到令牌,则可以看到其详细信息、到期时间以及可选的刷新令牌,当当前令牌过期时,您可以使用该令牌来获取新的访问令牌。单击“ Use Token”以选择返回的值。
所有成功获取到的令牌都将在请求“ Available Tokens”下拉列表中列出。选择一个用来发送您的请求。在下拉列表中可以管理所有令牌,如查看详细信息或删除令牌。
- Hawk Authentication:是另一种认证方案,采用的叫消息码认证算法,和 Digest 认证类似,它也是需要二次交互的
Hawk身份验证参数如下:
1)Hawk身份验证ID:您的API身份验证ID值。
2)Hawk身份验证密钥:您的API身份验证密钥值。
3)算法:用于创建消息认证码(MAC)的哈希算法。
高级参数:
1)用户:用户名。
2)Nonce:客户端生成的随机字符串。
3)ext:与请求一起发送的任何特定于应用程序的信息。
4)app:凭据与应用程序之间的绑定,以防止攻击者使用发布给他人的凭据。
5)dlg:颁发证书的应用程序的ID。
6)时间戳:服务器用来防止在时间窗口之外进行重放攻击的时间戳。
- AWS Signature:是针对亚马逊的 AWS 公有云用户签名的认证方式
- NTLM:是微软的局域网管理认证协议
- Akamai EdgeGrid:是 Akamai 的专属认证协议
最常用的两种鉴权方式为:Basic 以及 OAuth2
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!