SendGrid API 密钥不起作用。 “提供的授权授权无效、过期或撤销”
Posted
技术标签:
【中文标题】SendGrid API 密钥不起作用。 “提供的授权授权无效、过期或撤销”【英文标题】:SendGrid API Key is not working. "The provided authorization grant is invalid, expired or revoked" 【发布时间】:2016-04-19 18:44:40 【问题描述】:SendGrid 似乎阻止了我的节点 js 服务器发送电子邮件。
我在发送电子邮件的回复中收到此错误消息:
提供的授权无效、过期或撤销
我也有一个 API 密钥设置,并且遵循了文档。
【问题讨论】:
这会更容易调试一些代码;) 这是我之前票证的代码:***.com/questions/34788083/… 您能否重新检查您的 apikey,我刚刚将我的修改为不正确并收到问题“[错误:提供的授权授权无效、过期或撤销]”。仔细检查并告诉我。 我已经检查了两倍,看起来还不错 @kunalbatra - 还有其他想法吗? 【参考方案1】:您需要使用 API KEY GENERATED
请勿使用 API 密钥 ID
Sendgrid 仅在您创建时显示生成的密钥一次。
如果您在创建密钥时没有将其记录在某处,则需要创建一个新密钥,然后您可能想删除旧密钥,因为如果您不知道它是什么,它将无用是。
仅供参考:上面屏幕截图中的 API 密钥已被删除。我立即删除了它,所以请不要担心我泄露了那个密钥。
【讨论】:
我明白了,我在哪里可以找到那个?我正在为它搜索发送网格 Sendgrid 在创建时只显示生成的密钥一次。如果您在创建密钥时没有将其记录在某处,则需要创建一个新密钥。 他们不会让我参加免费计划。也不让我删除它 我已经给他们发了邮件,希望他们对我的帐户进行排序 点击“删除”几次。这对我两个来说是个小故障。我点了六次“删除”,等了一分钟后刷新页面,终于被删除了。【参考方案2】:这是一个较晚的答案并且面向 JAVA.. 但我只是复制了文档并没有注意到..
SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY"));
我只是把我的钥匙放在那里,没有看到 getEnv。当然很傻......但是当试图让事情快速工作时......
【讨论】:
new SendGrid("SENDGRID_API_KEY");
这对我有用。 System.getenv 没有工作。
是的,您的代码只需像这样: SendGrid sg = new SendGrid("YOUR_SENDGRID_API_KEY");没有 System.getenv() 方法!想知道为什么他们仍然在文档中包含它【参考方案3】:
在 Sendgrid v3 中,我在 Node JS 中使用 env 变量时遇到了类似的问题。如果我使用 env 变量,我会遇到上述问题。但是,如果我将字符串放入 require 进程中,它就会起作用。
不起作用:
SENDGRID_API_KEY=SG.XXXXXXXXXXXXXXXXXXX
var sg = require('sendgrid')(process.env.SENDGRID_API_KEY);
作品
var sg = require('sendgrid')('SG.XXXXXXXXXXXXXXXXXXX');
将 SG.XXXXXXXXXXXXXXXXXXX 替换为 API Key Generated(在密钥生成期间您只能看到一次)。
编辑
注意:确保不要将其保存到公共存储库。如果您这样做,任何人都可以使用您的 API 密钥,并且您的帐户将被 Sendgrid 团队暂时暂停,直到您将其从存储库中删除。
【讨论】:
这个解决方案对我有用,但你知道如何解决这个问题吗?对于使用 .env 文件的开发人员来说,这不是一个好的解决方案。 我遇到了同样的错误。因此,如果有人遇到同样的问题 - 请仔细检查您的 .env 文件。键不应包含在引号 "" 或任何其他分隔符中。应该类似于:SENDGRID_API_KEY = your_key_here【参考方案4】: 如果您使用的是node js
,
确保在需要sendgrid/nodemailer
模块的文件中包含require('dotenv').config()
行。
没有它,sendgrid 传输器 将有一个undefined
值而不是api_key
。
【讨论】:
【参考方案5】:对我来说,我只需要生成一个新的 API 密钥。由于某些奇怪的原因,以前的 API 密钥已失效,所以我还为这种情况添加了警报
【讨论】:
我也是这样。你知道为什么以前的 API 密钥会失效吗?另外,您设置了哪种警报? 不知道为什么会这样,已经半年多了,抱歉不能提供更多有用的信息【参考方案6】:我遇到了同样的问题,在我验证了我的电子邮件地址并启用了 2FA 后它就消失了。
【讨论】:
【参考方案7】:在我的情况下,我尝试使用 telnet 调试连接并一直被拒绝。
原来这两个是不等价的,echo
会在编码字符串中包含\n
。
echo 'apikey' | base64
printf 'apikey' | base64
是的,请确保您没有在 API 密钥中包含换行符。
【讨论】:
感谢您的建议。我在 kubernetes 中使用 SendGrid,需要存储使用 base64 加密的 apikey 值。这几天我一直为此发疯,而这正是发生在我身上的事情。【参考方案8】:这是我的解决方案:
安装 dotenv 包:npm i dotenv
转到应用程序的最早入口点(即 index.js)并将其放在顶部:
const dotenv = require('dotenv').config();
创建一个 .env 文件并添加 SENDGRID_API_KEY=
在您使用 sendgrid 的文件中,将其添加到顶部:
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
完成。
【讨论】:
以上是关于SendGrid API 密钥不起作用。 “提供的授权授权无效、过期或撤销”的主要内容,如果未能解决你的问题,请参考以下文章
在列表 mailchimp api 中添加成员不起作用 [list memeber] cURL:提供的 API 密钥链接到不同的数据中心(状态:403)
Android Google Maps Direction Api - Api 密钥限制不起作用
Google Maps Android API 示例密钥不起作用?
我的谷歌地图 api 密钥在 python 中不起作用,尽管它可以在 swift 中运行
iOS 应用上的 Youtube API v3。我的 API 密钥不起作用,但其他人的密钥在同一个应用程序上工作。错误 403