【问题标题】:Session expired or invalid on using access token使用访问令牌时会话已过期或无效
【发布时间】:2021-02-17 21:15:56
【问题描述】:

我创建了一个连接的应用程序,在其中我通过新连接的应用程序中可用的使用者密钥和使用者密钥选择了 OAuth 范围“访问和管理您的数据 (api)”和“完全访问权限 (完全)” ,我已经生成了一个访问令牌。

但是当我向我在沙盒实例中创建的 RestResource 发送一个新的 put 请求时,标头键为“授权”,值为“Bearer my_access_token”,我收到以下错误。

[
  {
    "message": "Session expired or invalid",
    "errorCode": "INVALID_SESSION_ID"
  }
]

我向其发送请求的 url 如下所示

https://my_instance_url/services/apexrest/CustomerAccountSync

我尝试通过在标题中添加“OAuth”而不是“Bearer”来更改发送访问令牌的方式。但我仍然收到相同的错误响应。

谁能告诉我为什么会这样?我正在使用“Insomnia”进行 API 调用。

【问题讨论】:

  • 其他 API 调用是否正常?喜欢/services/data/v50.0/query?q=SELECT Id FROM Account LIMIT 5?您是否使用从登录调用返回的实例 url 库?也许配置文件需要执行该 Apex 类的权限,请让您的 SF 管理员检查。
  • 不,我再次尝试使用您提到的上述 URL 发送一个 get 请求 my_instance_url/services/data/v49.0/query?q=SELECT Id FROM Account LIMIT 5。它仍然给了我同样的错误
  • 您确定要发送到不同的端点?登录调用可能与通用 login.salesforce.comtest.salesforce.com 冲突。但是登录后的所有请求都需要使用响应中返回的instance_url,就像您从现在开始必须使用access_token一样。它将采用https://mycompany.salesforce.com 格式,因此您需要https://mycompany.salesforce.com/services/data/v50.0/query?q=SELECT Id FROM Account
  • 我将它发送到我在登录实例时看到的实例 URL,即 mycompany.salesforce.com 但我应该将它发送到我收到的实例 URL我在生成访问令牌时得到的响应。这是mycompany.my.salesforce.com。当我这样做时,它起作用了。这是端点问题。
  • 你能把上面的评论作为答案吗?这样我就可以接受它作为答案。

标签: rest session salesforce access-token apex


【解决方案1】:

您确定要发送到不同的端点?登录调用可能与通用 login.salesforce.comtest.salesforce.com 冲突。但是登录后的所有请求都需要使用响应中返回的instance_url,就像您从现在开始必须使用access_token一样。

它将采用https://mydomain.my.salesforce.com 格式,因此您需要https://mydomain.my.salesforce.com.salesforce.com/services/data/v50.0/query?q=SELECT Id FROM Account

更多关于如何测试的信息:https://stackoverflow.com/a/63255845/313628

文档:https://developer.salesforce.com/docs/atlas.en-us.api_iot.meta/api_iot/qs_auth_access_token.htm(它来自不同的 REST API,但同样适用)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2017-12-21
    相关资源
    最近更新 更多