sendgrid错误"禁止访问"在尝试获取用户配置文件API时

时间:2016-07-27 13:09:40

标签: sendgrid

以下API请求:

curl --request GET \
     --url https://api.sendgrid.com/v3/user/profile \
     --header 'Authorization: Bearer API KEY'\
     --header 'Content-Type: application/json'

来自文档:https://sendgrid.com/docs/API_Reference/Web_API_v3/user.html

使用以下正文的HTTP 403响应结果:

{"errors":[{"field":null,"message":"access forbidden"}]}

我去了设置 - > API密钥并单击“编辑详细信息”'查看授予我的API密钥的权限,据我所知,我没有任何可以授予(或撤销)与“用户个人资料”相关的权限。

为了安全起见,我已将每一项权限配置为“完全访问权限”。 (如果可用)或“读取访问权限”#39;如果'完全访问'不可用,但我仍然收到此HTTP 403错误。

为了能够检索我的用户个人资料,我需要授予API密钥的权限是什么?

10 个答案:

答案 0 :(得分:2)

我挖了这个并尝试了各种各样的事情。

您无法通过网站用户界面设置此权限。您必须进行API调用才能设置权限。

https://sendgrid.com/docs/API_Reference/Web_API_v3/API_Keys/api_key_permissions_list.html#User-Settings显示用户设置的所有可能权限/范围的列表。

https://sendgrid.com/docs/API_Reference/Web_API_v3/API_Keys/index.html#Update-the-name-amp-scopes-of-an-API-Key-PUT说明了如何将范围添加到API密钥中。

补充:所以这比这更令人费解。您不能使用API​​密钥修改API密钥,除非该密钥已具有“api_keys.update”的权限/范围。这意味着您发现自己陷入了困境22.您需要首次调用更新API密钥以使用基本授权标头(例如“授权:基本”)来使用“Authroization:Bearer {API_KEY}”授权标头。 {base64Encoded( “用户名:密码”)}”。相当复杂,现在很痛苦。听起来他们希望在几周内推出更新后的用户界面,这样我们都可以在将来避免这种小问题。

答案 1 :(得分:1)

我不知道它是否能解决某人,但是我尝试使用此文档向sendgrid添加联系人,以获取{“错误”:[{“字段”:null,“消息”:“禁止访问”}] }:

https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html#Add-Single-Recipient-POST

POST POST https://api.sendgrid.com/v3/contactdb/recipients HTTP/1.1

经过更多搜索后,我注意到了一个新文档(相同版本的API v3),但是具有非常不同的API方法:

https://sendgrid.api-docs.io/v3.0/contacts/add-or-update-a-contact

PUT /marketing/contacts

答案 2 :(得分:1)

我刚刚遇到了这个问题,这是我的解决方案:您需要创建Auth Sender:https://app.sendgrid.com/settings/sender_auth 对于测试,只需创建一个简单的单个发件人验证,对于产品,您应该在您的域上创建一个帐户。 我使用免费版本,修复此问题后可以发送电子邮件。请注意,电子邮件可以转到垃圾邮件收件箱。

答案 3 :(得分:0)

问题仍然存在,我想说他们的文档仍然没有完全解决它。我尝试修改密钥,添加了所有可能的用户配置文件范围,但是直到尝试用基本身份验证和简单的密码来调用它时,我仍然无法获取我的配置文件信息!

由于该调用中没有提及API密钥,因此您根本不必分配任何作用域。

curl -X GET \
  https://api.sendgrid.com/v3/user/account \
  -H 'Authorization: Basic base64encoded(username:password)' 

答案 4 :(得分:0)

此错误也是由于对api密钥的权限不足而引起的。

https://sendgrid.com/docs/API_Reference/Web_API_v3/API_Keys/api_key_permissions_list.html#User-Settings

为了仅与api key一起使用:

Go to Settings > Api keys > Edit Api Key > User Account

中提琴!像API密钥作为Auth一样具有魅力。

curl --request GET \
 --url https://api.sendgrid.com/v3/user/profile \
 --header 'Authorization: Bearer API KEY'\
 --header 'Content-Type: application/json'

希望这会有所帮助:)

答案 5 :(得分:0)

根据我自己的测试(找不到任何官方文件),SendGrid Email的免费版本看起来只允许通过API发送电子邮件。为了通过API进行任何其他类型的调用,您需要将帐户升级为付费帐户。

答案 6 :(得分:0)

正如库拉姆·塔希尔(Khurram Tahir)所述,这与免费版本有关。无关。为了满足合法的发送行为和声誉,SendGrid要求我们验证发送者标识符(即“发件人”电子邮件地址)。

请参阅以下文档,其中清楚列出了验证步骤。 https://sendgrid.com/docs/ui/sending-email/sender-verification/

我也遇到了(禁止403访问)问题,我已经按照上述步骤解决了我的问题并能够发送电子邮件。

答案 7 :(得分:0)

对于任何发现此问题的任性Google员工...我相信截至2020年11月,Sendgrid修复了初始权限错误...因此,新的api密钥应具有正确的权限。但是...即使不是问题,某些api调用仍会报告“禁止访问”错误。

例如以以下查询为例:

curl --request POST --url https://api.sendgrid.com/v3/categories/stats --header 'Authorization: Bearer secretapikey' --header 'Content-Type: application/json' --data '{"start_date": "2015-01-01","categories": ['Email 123']}'

该操作失败,并禁止访问。.即使您的api密钥确实拥有使用权限。相反,问题在于,Sendgrid需要您对某些请求使用GET而不是POST(愚蠢的)……而且url参数必须使用urlencoded。以下确实可以正常工作。

curl --request GET --url 'https://api.sendgrid.com/v3/categories/stats?start_date=2019-01-01&categories=Email%20123&aggregated_by=month' --header 'Authorization: Bearer secretapikey' --header 'Content-Type: application/json'

如果在文档(例如https://sendgrid.com/docs/API_Reference/Web_API_v3/Stats/categories.html)中看到使用GET变量的请求...机会也可能会在CURL请求中使用。

答案 8 :(得分:0)

如果像我一样,您是从节点库文档来到这里的,正如 Marius 上面所说,您的 2021 帐户将无法与节点客户端库中列出的旧 API 一起使用。使用节点客户端,但在这里使用新的 api: https://sendgrid.api-docs.io/v3.0/contacts/add-or-update-a-contact

2021 年有效:

const client = require('@sendgrid/client');
client.setApiKey(sendgrid_api_key)

const uploadRequest = {
        body: {
          list_ids: [listId],
          contacts: [
          {
            email: email,
            first_name: firstName
          }
        ]},
        method: 'PUT',
        url: '/v3/marketing/contacts'
      }
const uploadResponse = await client.request(uploadRequest)

Sendgrid 可能会以这种速度在大多数不一致的文档中占据 Paypal 的桂冠:)

答案 9 :(得分:0)

对我来说,我尝试调用 POST /v3/marketing/contacts 但似乎此端点用于新营销。我们公司使用传统营销,我必须使用其他端点