rest - 使用 Postman 时 Apigility 中的基本身份验证

标签 rest authentication authorization postman laminas-api-tools

我有一个非常简单的 REST 服务,使用 Apigility,公开 GET 和 POST 方法。我用 postman 测试它。一切正常。

然后我尝试添加身份验证层。为此,我创建一个 htpasswd 文件,创建一个通过 Apigility 接口(interface)指向该文件的基本身份验证适配器,然后在 API 的设置页面上选择该身份验证类型。

我最终选择为 POST 请求添加授权请求,而不是 GET。

当我尝试发帖时,系统会要求我输入登录名和密码,我输入与 htpasswd 文件内容匹配的登录名和密码,生成授权 header ,并且 POST 效果很好。

但是当我尝试发出没有授权 header 的 GET 请求时,系统仍然要求我输入登录名和密码。如果我取消,我会收到 401 状态代码(未经授权)。

据我了解,如果没有设置授权 header ,则 Apigility 使用“访客”模式,并且由于 GET 方法不需要身份验证,因此我不必输入登录名和密码访问我的资源。

我哪里出错了?我哪里没理解错?

谢谢

最佳答案

您刚刚提到您正在 Postman 中执行此操作,我认为这就是问题所在。

HTTP 身份验证有一个“预身份验证”阶段,如果不存在凭据,它会在响应中包含一个 WWW-Authenticate header 。对于机器客户端(cURL、HTTPie、基于语言的客户端等),只要状态代码不是 401 或 403,就会忽略这一点。

但是,在基于浏览器的客户端(例如 Postman)中,当浏览器遇到此类 header 时,它们通常会发出身份验证质询,并在取消时发送空凭据。当然,这意味着使用无效凭据发送授权 header ,从而导致 401。

尝试从 CLI 使用 cURL 或 HTTPie;您应该会看到非常不同的行为。

关于rest - 使用 Postman 时 Apigility 中的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29940736/

相关文章:

java - 授权0 : how to retrieve app_metadata and user_metadata in token?

java - Jersey 2 使类/对象在整个应用程序中持续存在

java - 将动态 JSON 对象发布到 Spring RESTful Web 服务

http - 如何在页面重新加载时在 AngularJS 中保留 REST 身份验证凭据?

ajax - 使用restful api的简单搜索

php - Symfony2 创建经过身份验证的 session

php - CakePHP 的外部认证/授权

c# - 未经授权时重定向

authentication - ADFS 作为 OAuth2 提供者/身份验证服务器可能吗?

android - 关于 OAuth 和 Android 的一些问题