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

时间:2015-04-29 10:15:06

标签: rest authentication authorization postman apigility

我使用Apigility有一个非常简单的REST服务,暴露了GET和POST方法。我用Postman测试它。一切正常。

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

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

当我尝试发帖时,我要求输入登录名和密码,输入与htpasswd文件内容匹配的内容,生成Authorization标头,POST工作正常。

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

据我所知,如果没有设置授权标头," guest" Apigility使用模式,因为GET方法不需要身份验证,所以我不必输入登录名和密码来访问我的资源。

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

由于

2 个答案:

答案 0 :(得分:2)

你刚刚提到你在Postman做过这件事,我认为这就是问题所在。

HTTP身份验证具有" pre-auth"阶段,如果没有凭据,则在响应中包含WWW-Authenticate标头。对于机器客户端(cURL,HTTPie,基于语言的客户端等),只要状态代码不是401或403,就会忽略它。

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

尝试使用CLI中的cURL或HTTPie;你应该在那里看到非常不同的行为。

答案 1 :(得分:0)

您可能只需要更新配置并设置哪些方法可以&不要求身份验证。

检查您的配置以了解以下配置:

[
    'zf-mvc-auth' => [
        'authorization' => [
            'Your\Controller' => [
                'collection' => array(
                    'default' => true,
                    'GET' => true,
                    'POST' => true,
                    // etc.
                ),
                'entity' => array(
                    'default' => true,
                    'GET' => true,
                    'POST' => true,
                    // etc.
                ),
            ]
        ]
    ]
]

您需要将未经身份验证的方法设置为false