Laravel API 调用失败。 PostMan 使用 Basic Auth 覆盖 Authorization 标头

Posted

技术标签:

【中文标题】Laravel API 调用失败。 PostMan 使用 Basic Auth 覆盖 Authorization 标头【英文标题】:Laravel API call failed. PostMan overrides Authorization header with Basic Auth 【发布时间】:2017-09-05 05:18:47 【问题描述】:

您好,我正在尝试从 Postman 调用 API。 使用的框架是:Laravel

网站具有浏览器身份验证(使用 .htacess) 并且 API 有用户认证(Laravel Passport)(用户必须登录)

现在,

我需要调用一个 API 并包含两个标头,即

我添加了带有用户名/密码的基本身份验证作为浏览器凭据

基本身份验证:用户名/密码

我在标题中添加了

授权:承载 oauthtoken

(其中 oauthtoken 是从 API 调用 https://servername/auth 和基本身份验证中检索到的密钥:用户名/密码)

现在当我发送 API 调用时,

授权标头更改为:

授权:基本 some_key

因此我得到未经授权的回应。 有什么方法可以将浏览器凭据和用户身份验证标头一起发送吗?

【问题讨论】:

【参考方案1】:

您在身份验证后检索到的 OAuth 令牌与 Postman 为基本身份验证附加的令牌不同。

如果您希望在请求中使用您的 OAuth 令牌,我建议您查看 Postman 变量并将该令牌存储在其中。

Here is an article that helped me build my Postman collection using JWT

但是里面的一些脚本已经过时了。

我将首先创建一个环境(本地),您可以在其中添加一个密钥来存储值为空的令牌 (oauth_token)。

在 Postman 中的 auth 端点中,您可以检查 Tests 选项卡,您可以在其中放置脚本以更新 oauth 令牌:

pm.test("Logged in successfully", function () 
    var jsonData = pm.response.json();
    pm.environment.set('oauth_token', jsonData.token);
);

在此之后,您可以将值为 oauth_token 的授权承载添加到使用 OAuth 令牌的端点。

如果您想了解有关 Postman 变量的更多信息,这是一篇很棒的帖子 variables

回顾一下:

    将用户名和密码发送到身份验证端点 将 oauth 令牌存储在步骤 1 返回的 Postman 变量中 使用 VARIABLE_NAME 表示法将您的新令牌用作 Postman 变量

【讨论】:

【参考方案2】:

我建议使用Guzzle Library

        $http = new \GuzzleHttp\Client;
        $response = $http->request('POST', 'http://quotible.web3box.com/oauth/token', [
            'headers' => [
                //you headers here
            ],
            'form_params'=>[
                //your browser based parameters here
            ]
        ]);

【讨论】:

以上是关于Laravel API 调用失败。 PostMan 使用 Basic Auth 覆盖 Authorization 标头的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 API 调用未正确返回验证错误

Axios CORS/Preflight 因 Laravel 5.4 API 调用而失败

使用 POSTMAN 测试 Laravel API 路由

对 API 的请求在 Postman 中有效,但在我尝试使用 laravel/guzzle 时无效

Laravel 5.3 Passport API 在 Postman 中使用个人访问令牌未经身份验证

Laravel:如何通过 API postman 上传图像并将其保存到数据库(phpmyadmin)