我的目标是将 Meetup oauth2 添加到Open Collective,这是一个使用 Passport 的 Node.js 服务器。(我之前用 GitHub oauth2 成功过,所以原则上只是添加Passport 策略 passport-meetup-oauth2
。)
为了避免使用 localhost 的任何问题(在其他 SO 票证中观察到的问题),我使用了 HTTPS ngrok 隧道。在 Meetup.com 上,我创建了一个新的消费者:
- 重定向 URI:https ://e03857fc.ngrok.io (也尝试使用下面提到的完整 callbackURL,结果相同)
- 网站:留空(也尝试了与重定向 URI 相同的值,结果相同)
在我的代码中,我将 MeetupStrategy 配置为:
- clientID:“Key”显示在我的 Meetup“Your OAuth Consumers”页面上
- clientSecret:“秘密”显示在我的聚会“您的 OAuth 消费者”页面上
- callbackURL:“ https://e03857fc.ngrok.io/connected-accounts/meetup/callback ”
然后我尝试流程:我被正确重定向到 Meetup.com,我被要求登录并单击“允许”,然后我被重定向回我的服务器,但 Passport 发出500 TokenError:
{ TokenError
at Strategy.OAuth2Strategy.parseErrorResponse (~/passport-oauth2/lib/strategy.js:321:12)
at Strategy.OAuth2Strategy._createOAuthError (~/passport-oauth2/lib/strategy.js:368:16)
at ~/passport-oauth2/lib/strategy.js:167:45
at ~/oauth/lib/oauth2.js:181:18
at passBackControl (~/oauth/lib/oauth2.js:123:9)
at IncomingMessage.<anonymous> (~/oauth/lib/oauth2.js:143:7)
at emitNone (events.js:91:20)
at IncomingMessage.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:934:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
name: 'TokenError',
message: undefined,
code: 'invalid_client',
uri: undefined,
status: 500 }
authorization_code
第二个 oauth2 步骤(交换为)引发错误access_token
: Passport 调用 Meetup API,该 API 以 HTTP 400 回复Bad Request
{"error":"invalid_client"}
。在oauth lib添加日志后,我可以重现 Meetup invalid_client 错误,如下所示:
curl -v -X POST https://secure.meetup.com/oauth2/access -H "'Content-Type': 'application/x-www-form-urlencoded'" --data "grant_type=authorization_code&redirect_uri=https%3A%2F%2Fe03857fc.ngrok.io%2Fconnected-accounts%2Fmeetup%2Fcallback&client_id=XXX&client_secret=YYY&code=ZZZ"
看起来问题出在 Meetup 方面,因为我可以使用 curl 重现它,并且客户端 ID 和密码似乎正确。知道是什么导致了错误吗?