【问题标题】:Sendgrid API: The provided authorization grant is invalid, expired, or revokedSendgrid API:提供的授权授权无效、过期或撤销
【发布时间】:2017-03-20 18:12:21
【问题描述】:

我刚刚创建了一个 sendgrid 帐户。然后我去了设置=> API Keys 并点击“创建 API 密钥”并授予任何可能的权限。

然后我创建了一个 c# 项目,添加了 nuget 包并将我从 here 编写的 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);

*问题是创建密钥时没有人阅读消息,而且微软选择向我们显示“API Key ID”,这是有史以来最糟糕的名称

这不是重复的,因为虽然原因相同,但没有人会猜到,因为在 c# 中我们使用的是 nuget 库,而不是 api。

【问题讨论】:

  • @bwest 它不是重复的,因为我们使用 nuget 库,而在另一个问题中他们使用了 api。所以虽然答案是一样的,但问题是不同的,除非他知道问题,或者阅读正确的问题,否则没人会猜到
  • 无论使用何种语言,它都是完全相同的错误消息、根本原因和解决方案,因此它是相同的基本问题。这是在 SO 上重复的标准。但我们会看看这些模组的作用。

标签: c# sendgrid


【解决方案1】:

您的 API 密钥有问题。检查this answer,生成新密钥,并仔细检查您的权限。

您也无需在SendGrid.SendGridAPIClient 中指定网址。我会删除该行以减少硬编码值。

【讨论】:

  • 没错。我不知道他们为什么会这样?
【解决方案2】:

直接放key,不要使用System.getenv(KEY)

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

【讨论】:

  • -1 表示反模式。将密钥直接放在代码中应该仅用于开发目的。如果您轮换您的密钥(bc 安全告诉您),您将不得不重新部署该应用程序。您也不希望密钥,即使它们已过时存储在源代码管理中。为避免使用密钥便签,请考虑使用 Azure DevOps(库)或 GitHub 机密管理器等工具来存储用于开发的密钥,并使用 Azure Key Vault、AWS Secrets Manager 或 HashiCorp 的 Vault。
猜你喜欢
  • 2019-03-29
  • 2019-11-08
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
相关资源
最近更新 更多