每天傍晚伴你一起成长!
REST WebServices 中的身份验证和授权是REST API[1]上下文中的两个非常重要的概念。在大多数情况下,您将访问受保护的REST API。所谓安全,是指要求您提供身份证明的API。身份证明可以以
•用户名和密码•认证令牌•秘钥•生物识别技术和许多其他方式
在REST API的上下文中,我们将对前三个选项详细探讨。
什么是身份验证?并且授权在REST WebServices中起作用吗?
认证是一种证明您是以合法身份访问系统的过程。
例如,在登录电子邮件帐户时,您可以通过提供用户名和密码来证明自己。如果您拥有用户名和密码,那么您就是合法访问者。这就是身份验证的意思。
在REST API的上下文中,身份验证使用HTTP请求进行。
注意: 不仅是REST API,使用HTTP请求还会对通过HTTP协议运行的任何应用程序进行身份验证。
基本认证流程
以电子邮件登录为例,我们知道,为了验证我们自己的身份,我们必须提供用户名和密码。在使用用户名和密码的非常基本的身份验证流程中,我们还将在REST API调用中执行相同的操作。但是我们如何在REST请求中发送用户名和密码?
REST请求可以具有一个称为Authorization Header的特殊标头, 该标头可以包含某种形式的凭据(用户名和密码)。收到带有授权标头的请求后,服务器可以验证凭据,并可以让您访问私有资源。
让我们看一个例子,我们创建了一个API,该API需要有效的用户名和密码来访问资源。
端点:http : //restapi.demoqa.com/authentication/CheckForAuthentication
在下面的代码中,我们将尝试点击URL,然后查看得到的响应。
@Test
public void AuthenticationBasics()
{
RestAssured.baseURI = "https://restapi.demoqa.com/authentication/CheckForAuthentication";
RequestSpecification request = RestAssured.given();
Response response = request.get();
System.out.println("Status code: " + response.getStatusCode());
System.out.println("Status message " + response.body().asString());
}
在上面的代码中,我们只是向端点发出HTTP GET请求。在此代码中,我们未添加任何授权标头。因此,预期的行为是我们将获得授权错误。如果运行此测试,您将获得以下输出。
Status code: 401
Status message:
{
"StatusID": "FAULT_USER_INVALID_USER_PASSWORD",
"Status": "Invalid or expired Authentication key provided"
}
输出清楚地表明我们有“提供了无效或过期的验证密钥” 错误。这意味着没有身份验证信息或提供的信息无效。最终,服务器拒绝我们的请求并返回错误响应。
注意:请特别注意返回的状态代码。如果身份验证失败,服务器应以401未经授权的状态代码响应。
尝试使用浏览器访问该URL。您应该得到一个用户名和密码提示。下图显示了当您从浏览器中访问此URL时应该获得的内容。
什么是授权?以及授权如何在REST WebServices中工作?
授权是授予某人访问权限的过程。如果您被授权,则可以访问该资源。现在要进行授权,您需要提供凭据,正如我们之前讨论的那样,该过程称为身份验证。因此,授权和认证是紧密相关的术语,通常可以互换使用。
在结束本教程之前,让我们在上述URL中查看私有资源的内容。为此,请输入以下凭据
用户名:ToolsQA
密码:TestPassword
服务器将能够进行身份验证,然后授权您访问私有资源内容。下图显示了成功认证后的内容。
有了对身份验证和授权的基本了解, 下一篇章将讲述 REST API中身份验证模型的特定类型。
END
时光,在物转星移中渐行渐远,春花一梦,流水无痕,没有在最想做的时候去做的事情,都是人生的遗憾。人生需要深思熟虑,也需要一时的冲动。