以下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密钥的权限是什么?
答案 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,“消息”:“禁止访问”}] }:
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密钥的权限不足而引起的。
为了仅与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 但似乎此端点用于新营销。我们公司使用传统营销,我必须使用其他端点