当我请求
/rest/me
LinkedIn API 端点时...
curl --location 'https://api.linkedin.com/rest/me' /
--header 'Content-Type: application/json' /
--header 'Authorization: Bearer {MY_TOKEN}' /
--header 'LinkedIn-Version: 202306'
--header 'X-Restli-Protocol-Version: 2.0.0'
我遇到错误...
{
"status": 403,
"serviceErrorCode": 100,
"code": "ACCESS_DENIED",
"message": "Not enough permissions to access: partnerApiMe.GET.20230601"
}
我的访问令牌具有 API 文档中列出的权限范围 (
r_liteprofile
)。因此,我向 LinkedIn 开发人员支持团队发送了一条消息,他们说...
...从版本 202306 开始,对 r_liteprofile 的支持已取消,但我们正在尝试获得对该决定的官方确认,以更新文档。允许 /me 访问的最小权限现在将是 r_basicprofile 。
明白了。 API 文档是错误的。因此,我将权限从
r_liteprofile
更改为 r_basicprofile
,生成了新的访问令牌,但我仍然遇到相同的错误。
几个小时后,我再次测试代码,它成功了!但为什么呢?
更改权限后,等待至少 5 分钟后再进行测试。
LinkedIn API 访问令牌存在 缓存错误。
生成新的访问令牌 SHOUD 会使之前的令牌失效,但是有一个 5 分钟的窗口,您的新令牌可能会表现得像旧令牌(使用旧的权限/范围)。
这使得 LinkeIn API 开发非常困难。 每当开发人员更改权限范围时,新令牌都可能会抛出(无效)权限错误几分钟,使范围更改看起来没有任何区别。然后几分钟后,新的权限将意外生效,使得该错误很难重现。
我用一个应用程序来证明这一点向 LinkedIn 开发者支持团队报告了这一点,他们做出了回应...
经过多次讨论,团队已确认他们会将其视为产品改进的一部分,但目前 5 分钟 TTL 是预期行为。 开发人员通常没有这种尝试为不同权限组合生成令牌的模式。这更像是罕见的用例。
目前我们已将此反馈添加到我们的路线图中。不幸的是,我们没有具体的时间表来说明何时将其实施到生产中
我不同意。 更改权限和生成新令牌是开发人员经常做的事情,因为他们试图找出不同的 API 调用需要哪些权限。我知道我已经这样做了很多次,尤其是在发现一些 API 文档没有保持最新之后......只是必须记住在测试之前等待 5 分钟。
如果您遇到这个问题,请投票支持这个问题,这样LinkedIn就会看到有多少开发者遇到这个问题。
这也会在升级
LinkedIn-Version
时产生问题。在版本 202306
中,他们更改了 /rest/me
端点所需的权限 - 从 r_liteprofile
更改为 r_basicprofile
。这意味着我们将不得不要求一些客户重新授权他们的 LinkedIn 帐户,以获得新的访问令牌(具有 r_basicprofile
范围)。但如果他们的旧令牌(带有 r_liteprofile
)在过去 5 分钟内被使用,他们可能会遇到此缓存错误,并出现权限错误。