Sendgrid API:提供的授权许可无效,已过期或被撤销。

8
我刚刚创建了一个sendgrid帐户。然后我进入设置=>API密钥,点击“创建API密钥”并给予任何可能的权限。
然后我创建了一个C#项目,添加了NuGet包,并从这里编写了我的hello world代码。
 public async Task HelloEmail()
 {
            dynamic sg = new SendGrid.SendGridAPIClient("XXX-XXXXXXXXXXXXXXXXXX", "https://api.sendgrid.com");

        Email from = new Email("MY@Email.com");

        String subject = "Hello World from the SendGrid CSharp Library";
        Email to = new Email("test@example.com");
        Content content = new Content("text/plain", "Textual content");
        Mail mail = new Mail(from, subject, to, content);
        Email email = new Email("test2@example.com");
        mail.Personalization[0].AddTo(email);

        dynamic response = await sg.client.mail.send.post(requestBody: mail.Get());

        var x=response.StatusCode;
        var y = response.Body.ReadAsStringAsync().Result;
        var z = response.Headers.ToString();
 }

但我得到的是

未经授权 =>

"{\"errors\":[{\"message\":\"提供的授权凭证无效、过期或被撤销\",\"field\":null,\"help\":null}]}"


在这个例子中,他们从EnvironmentVariableTarget.User获取了API密钥,这与此有关吗?
string apiKey = Environment.GetEnvironmentVariable("NAME_OF_THE_ENVIRONMENT_VARIABLE_FOR_YOUR_SENDGRID_KEY", EnvironmentVariableTarget.User);
dynamic sg = new SendGridAPIClient(apiKey);

问题在于在创建密钥时没有人阅读消息,此外Microsoft选择显示“API Key ID”,这是最糟糕的名称。
这不是重复问题,因为尽管原因相同,但由于我们在c#中使用nuget库而不是api,因此没有人会猜到。

1
@bwest 这不是重复的问题,因为我们使用NuGet库,而在其他问题中他们使用了API。因此,尽管答案相同,但问题是不同的,除非他知道问题或阅读正确的问题,否则没有人会猜到它。 - Ashkan S
无论是哪种语言,出现的错误信息、根本原因和解决方案都完全相同,因此这是同一个基本问题。这是 SO 上重复问题的标准。但我们会看看管理员会怎么做。 - bwest
2个回答

3

您的API密钥存在问题。请查看这个答案,生成一个新的密钥,并双重检查您的权限。

您也不需要在SendGrid.SendGridAPIClient中指定URL。我建议删除那一行以减少硬编码的值。


没错。我不知道他们为什么要这样做。 - Ashkan S

-1

直接放置密钥,不要使用System.getenv(KEY)

String key = "YOUR KEY";
 SendGrid sg = new SendGrid(key);

3
反模式得分为-1。直接在代码中放置密钥只应用于开发目的。如果您旋转密钥(因为安全告诉您这样做),则必须重新部署应用程序。即使它们已过时,您也不希望将密钥存储在源代码控制中。为避免使用便签纸保存密钥,请考虑使用类似 Azure DevOps(库)或 GitHub 密钥管理器的工具来存储开发所需的密钥,并使用 Azure Key Vault、AWS Secrets Manager 或 HashiCorp 的 Vault。 - daviesdoesit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接