邮递员:如何对使用 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,其中包含更多细节。
我有一个网络应用程序使用 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,其中包含更多细节。