使用OAuth获取Notion API的Access Token时遭遇invalid_client错误
以下是针对该问题的具体排查方向:
检查请求参数的URL编码
确保redirect_uri及其他含特殊字符的参数完成了URL编码,比如包含&、=或中文的URL必须转义。Postman等工具会自动处理编码,但手动构造请求时容易遗漏,这是常见触发invalid_client的原因。严格校验Content-Type请求头
确认请求头的Content-Type严格为application/x-www-form-urlencoded,不能带有多余空格,也不能误写为application/json或multipart/form-data。部分HTTP库会默认修改该头,需手动强制指定。核对参数名的拼写与格式
所有参数名必须完全匹配要求:client_id、client_secret、redirect_uri、grant_type、code,注意是下划线分隔而非驼峰式(如不能写成clientId);grant_type必须严格为authorization_code,不能有拼写错误。确认请求体的提交方式
必须以表单形式提交参数,不能将参数放在URL查询串中,也不能用JSON格式发送请求体。错误的提交方式会导致Notion服务器无法正确解析客户端凭证。排查凭证复制时的隐形字符
即使确认Client ID和Secret正确,也要检查是否在复制时带入了多余的空格、换行符或不可见字符。建议直接从Notion开发者控制台复制后,粘贴到纯文本编辑器中验证。对比Postman的请求细节
使用Postman的「Copy as cURL」功能导出正常工作的请求命令,与你自己的请求对比差异。比如导出的cURL可能是:curl --location --request POST 'https://api.notion.com/v1/oauth/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'client_id=YOUR_CLIENT_ID' \ --data-urlencode 'client_secret=YOUR_CLIENT_SECRET' \ --data-urlencode 'redirect_uri=YOUR_REDIRECT_URL' \ --data-urlencode 'grant_type=authorization_code' \ --data-urlencode 'code=THE_PROVIDED_CODE'通过对比可快速定位编码、请求头或提交方式的差异。
验证重定向URL的完全匹配
Notion要求redirect_uri必须与开发者控制台注册的URL完全一致,包括协议(http/https)、端口、路径,甚至结尾的斜杠。比如注册的是https://example.com/callback,就不能使用https://example.com/callback/或http://example.com/callback。
内容的提问来源于stack exchange,提问作者Chad Hutchins

