使用概念 API 进行授权时出现错误“缺少或无效的 redirect_uri”

Posted

技术标签:

【中文标题】使用概念 API 进行授权时出现错误“缺少或无效的 redirect_uri”【英文标题】:Getting an error `Missing or invalid redirect_uri` while using notion API for authorization 【发布时间】:2021-09-26 11:25:36 【问题描述】:

我正在尝试使用与 Notion API 的公共集成,并严格遵循文档。链接:https://developers.notion.com/docs/authorization#authorizing-public-integrations

但使用以下 index.html 时出现错误,重定向 uri 无效或丢失。

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>HTML</title>
  </head>
  <body>
    <a
      href="https://api.notion.com/v1/oauth/authorize?client_id=c7d10044-846c-423d-bc66-d6bf7838cc53&redirect_uri=https%3A%2F%2Fnotion-backend-intervue.herokuapp.com%2Fauth%2Fnotion%2Fcallback&response_type=code"
      >Add to Notion</a
    >
  </body>
</html>

为了处理所有进一步的步骤,这是我的后端配置。

app.get("/auth/notion/callback/:code/:state", (req, res) => 
    tempCode = req.params.code;
    tempState = req.params.state;
    console.log(tempCode);
    res.send(
        "message": "Yes this is the route you are looking for",
        "code": tempCode,
        "state": tempState
    );
    axios.post('/https://api.notion.com/v1/oauth/token', 
        grant_type: "authorization_code",
        code: tempCode,
        redirect_uri: 'https://notion-backend-intervue.herokuapp.com/auth/notion/callback/'
    ).then((response) => 
        console.log(response)
    ).catch((err) => 
        console.log(`error-->`, err);
    )
);

在集成设置中,我提供了这个 url 作为 redirect_uri:https://notion-backend-intervue.herokuapp.com/

由于未调用此获取请求(我从 Heroku 日志中确认了这一点)。我想我在提供重定向 URI 时做了一些格式问题。请帮帮我。

【问题讨论】:

【参考方案1】:

后来我发现这不是与重定向 uri 格式相关的问题,它是正确的,基于文档的预期。但是由于某些未知原因,文档中提供的格式不起作用,要么是在文档之后更新了 API,要么可能是由于一些错误。所以,这里是解决方案:

在锚标记中,将href链接更改为:

href="https://api.notion.com/v1/oauth/authorize?client_id=c7d10044-846c-423d-bc66-d6bf7838cc53&response_type=code"

然后,概念服务器将在重定向 uri 中为您提供您在 notion-integration-setting 中提供的链接,在我的情况下是这样的:

https://notion-backend-intervue.herokuapp.com/auth/notion/callback

因此,在后端创建一条路由以捕获该代码并将包含该代码的后请求发送到“https://api.notion.com/v1/oauth/token”,您将获得访问令牌为回应。

通过后端路由看起来像这样:

app.get("/auth/notion/callback", (req, res) => 
    let tempAuthCode = req.query.code;
    console.log("Code --> ", tempAuthCode);
    axios(
        method: "post",
        url: "https://api.notion.com/v1/oauth/token",
        data: 
            "grant_type": "authorization_code",
            "code": tempAuthCode,
        ,
        headers: 
            "Authorization":`Basic $encodedToken`,
            "Content-Type": "application/json"
        
    ).then((response) => 
        console.log(response);
    ).catch((err) => 
        console.log(err);
    );
);

正如您在上面看到的,您还必须从我的 post 请求的数据对象中省略 redirect_uri。

【讨论】:

以上是关于使用概念 API 进行授权时出现错误“缺少或无效的 redirect_uri”的主要内容,如果未能解决你的问题,请参考以下文章

将 API 迁移到 .net Core 3 时出现 JWT 401 未经授权的错误

使用基本授权(用户名和密码)时出现 VSTS REST API 错误

尝试使用 REST API 公开对象时出现“拒绝访问。提供的范围未经授权”错误

在 GCM 中发送推送通知时出现未经授权的错误

使用 Coldfusion/Railo 向 Mailchimp API v3.0 发送 PUT 请求时出现 401 未经授权的错误

cron 运行网站备份 google drive api 脚本时出现“无效授权”错误