邮递员:如何对使用 Google OAuth2 的 webapp 进行身份验证?

postman: How to authenticate for my webapp which uses Google OAuth2?

我有一个网络应用程序使用 Google OAuth2 来保证安全。我需要通过邮递员测试许多 API 端点,但它们要求用户使用 google.

进行身份验证

当我访问某些 API 时,例如 localhost:8080/user,如果用户未通过身份验证,Web 应用程序将重定向到 google 登录页面,并在身份验证后发送结果。否则,如果用户已经通过身份验证,它只会发回结果。我还可以使用 localhost:8080/login 显式登录用户(主页上的登录按钮就是这样做的)。这适用于浏览器,但不适用于邮递员。

如何在 Postman 中执行相同的操作?尝试访问 API returns 和 google 登录页面,但无法提供凭据(用户名、密码和 OTP)。有没有一种方法可以让我使用 localhost:8080/login 端点登录?

我认为您可以使用 "Pre-request Script" 功能来完成您的需要。

假设 POST /login 是可访问的,并且您能够存储经过身份验证的会话的会话数据,您可以使用 "Pre-request Script" 功能在每个请求之前执行身份验证。 (这可以在集合级别或请求级别完成。)

这是我在我使用的一些需要身份验证的端点上所做的示例...

const loginRequest = {
    url: "http://localhost:1337/login",
    method: "POST",
    body: {
        mode: "raw",
        raw: JSON.stringify({
            email: 'user@domain.com',
            password: 'so much security goin on here.'
        })
    }
};

pm.sendRequest(loginRequest, function (err, response) {
    const responseJSON = response.json();
    pm.environment.set('jwt_token', responseJSON.token);
    console.log(err ? err : pm.environment.get('jwt_token'));
});

这不是处理受保护端点预验证的最佳方式;你不是提出一个请求,而是每次提出两个请求。我通常做的是点击 POST /login,将我需要的结果存储在 collection/environment/global 变量中,然后在我的其他请求中使用这些变量。我使用 "two-request" 方法作为我需要执行的第三方身份验证(类似于我认为你正在尝试做的事情)或当我 creating/debugging API 要求对每个请求进行身份验证。

如果我离这里很远,请在评论中告诉我,我会更新我的回复。

可以使用选择 OAuth2 作为身份验证选项时显示的 "get new access token" 选项。

选择此选项后,添加相关详细信息,与您的申请中的相同。单击请求令牌现在应该显示一个简单的浏览器,如 window,其中应显示 OAuth 提供商登录页面。

登录后,Postman 会保存令牌,然后可以将其用于进一步的请求。

我创建了一个 blog post,其中包含更多细节。