0

我正在创建一个概念 API 与 OAuth 身份验证集成。当用户单击允许访问按钮并且 OAuth 跟随点击我的回调 URL 时,我不断收到invalid_client错误。此外,auth_token是通过集成控制台中提供的client_id:client_secret以 base64 格式创建的。当 OAuth 进程访问我的回调 URL 时,代码作为查询参数返回。

我错过了什么?

const code = req.query.code;

const auth_token = Buffer.from(
    "my_oauth_client_id:my_oauth_client_secret" // provided in integration panel
).toString("base64");

await axios
    .post(
        "https://api.notion.com/v1/oauth/token", {
            code,
            grant_type: "authorization_code",
            redirect_uri: "https://notion-fastlane-web-2hfaoof9v-oak93.vercel.app/api/notion/oauth/callback",
        }, {
            headers: {
                "Content-Type": "application/json",
                Authorization: `Basic ${auth_token}`,
            },
        }
    )
    .then(() => res.status(200).send("OK"))
    .catch((error) => {
        res.status(error.response.status).send(error.response.data);
    });
};
4

1 回答 1

0

作为初学者,我还发现授权过程的这一部分确实令人困惑。

在进行集成时,我发现 Axios 提供了一个“auth”参数(https://axios-http.com/docs/req_config),您可以将其添加到请求选项中,您可以在其中指定基本身份验证参数,即client id 和 secret又名username 和 password,它将为您对它们进行 base64 编码,并将它们以 Notion 指定的正确格式放置。您可以查看我用来查看您是否缺少其他任何内容的请求配置的其余部分。

 {
    method: "post",
    url: "https://api.notion.com/v1/oauth/token",
    auth: {
      username: process.env.OAUTH_CLIENT_ID,
      password: process.env.OAUTH_CLIENT_SECRET,
    },
    data: {
      grant_type: "authorization_code",
      code: temp_code,
      redirect_uri: "https://example.com/oauth/redirect",
    },
    headers: { "Content-Type": "application/json" }, 
}

另外,如果有帮助,我用 Notion 制作了整个 OAuth 过程的简化图:https ://naomiperez.netlify.app/notion-oauth-flow/

于 2021-08-08T09:43:11.090 回答