AWS Lambda执行Stack Exchange OAuth PKCE流程遇Cloudflare验证问题
Stack Exchange OAuth 2.0 PKCE流程AWS Lambda调用失败问题
我在AWS Lambda函数中实现Stack Exchange OAuth 2.0 PKCE流程,用完全相同的参数在Postman测试时,token交换能正常完成,但通过Lambda调用却失败了。
Lambda函数代码如下:
export const handler = async (event) => { try { const body = typeof event.body === "string" ? JSON.parse(event.body) : event.body ?? {}; const code = body.code; const codeVerifier = body.code_verifier; const redirectUri = body.redirect_uri; const params = new URLSearchParams({ client_id: String(process.env.STACKEXCHANGE_CLIENT_ID), client_secret: String(process.env.STACKEXCHANGE_CLIENT_SECRET), redirect_uri: redirectUri, code_verifier: codeVerifier, code: code }); const tokenResponse = await fetch("https://stackoverflow.com/oauth/access_token/json", { method: "POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', }, body: params.toString() }); const contentType = tokenResponse.headers.get("content-type"); if (contentType && contentType.includes("application/json")) { const data = await tokenResponse.json(); return response(200, { access_token: data.access_token }); } else { const text = await tokenResponse.text(); console.error("Non-JSON response:", text); return response(tokenResponse.status, { error: "Non-JSON response from StackOverflow" }); } } catch (err) { return response(500, { error: err.message }); } };
调用Lambda时,没有收到预期的JSON响应,反而得到一个Cloudflare机器人防护验证页面,页面开头内容如下:
<!DOCTYPE html> <html lang="en-US"> <head> <title>Just a moment...</title> ... </head>
我已经尝试过以下方案:
- 添加多种User-Agent请求头
- 添加Accept-Encoding和Accept-Language请求头
- 验证所有参数均正确无误(在Postman中可正常工作)
- 检查环境变量已正确配置
内容的提问来源于stack exchange,提问作者OhhhThatVarun
相关产品推荐
相关产品推荐

