向 Twilio 进行身份验证以从 sub-account 或使用 API 密钥发送消息时出现问题

Issues authenticating to Twilio to send message from sub-account or using API Keys

我在通过 Twilio 消息服务发送 SMS 消息时遇到一些问题。

我有 parent 帐户和 sub-account 配置。

cURL语句如下:

curl --location --request POST 'https://api.twilio.com/2010-04-01/Accounts/{{account-sid}}/Messages.json' \
--header 'Authorization: Basic {{auth}}' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'Body=test' \
--data-urlencode 'MessagingServiceSid={{messaging-service-SID}}' \
--data-urlencode 'To=REDACTED'

我可以让它为 account-sidauth header 的某些组合工作,但并非所有都按预期工作。

例如这是一个 table,描述了哪些有效,哪些无效。

Number account-sid in URL path username in auth header password in auth header Works? Expected Result?
#1 Parent Account SID Parent Account SID Parent Account Auth Token NO - HTTP 404 YES
#2 Parent Account SID Parent Account API Key Parent Account API Secret NO - HTTP 401 NO - should return HTTP 404
#3 Parent Account SID Sub Account SID Sub Account Auth Token NO - HTTP 401 NO - should return HTTP 404
#4 Parent Account SID Sub Account API Key Sub Account API Secret NO - HTTP 401 NO - should return HTTP 404
#5 Sub Account SID Sub Account SID Sub Account Auth Token NO - HTTP 401 NO
#6 Sub Account SID Sub Account API Key Sub Account API Secret NO - HTTP 401 NO
#7 Sub Account SID Parent Account SID Parent Account Auth Token YES YES
#8 Sub Account SID Parent Account API Key Parent Account API Secret NO - HTTP 401 NO

关于为什么其中一些(特别是上面 table 中的预期结果是 'NO' 的那些)不起作用的任何想法?仅供参考,基本身份验证是由 Postman 计算得出的,如下所示,因此应该没有任何问题。注意:我一直在适当地更改变量,甚至硬编码 usernames/passwords...

FWIW 我没想到在 URL 路径中具有 parent 帐户 SID 的任何一个都可以工作,但只是为了完整性而添加了它们......我真正想要的那个开始工作是#6,因为我想为各个子系统生成单独的 API 密钥,以在 API 密钥之一被泄露时缓解 risk/impact。任何想法为什么这可能不起作用...

行为因您呼叫的 API 的主机部分而异。

只有 api.twilio.com 支持使用主帐户帐户 SID 和身份验证令牌调用 sub-accounts。这是使用此处定义的构造完成的(Node.js 示例):

const client = require('twilio')(accountSid, authToken, { accountSid: subaccountSid });

来源:https://www.twilio.com/docs/iam/api/subaccounts

When performing CRUD operations within a subaccount, use the subaccount SID and auth token. Alternatively, you can generate API Keys at the subaccount level for authentication.

我设法将其缩小为 API Key/secret 的问题。多名 Twilio 员工向我提供了他们声称有效的示例,这些示例与我的示例完全相同,但对我不起作用...我尝试在不同的区域创建 API Key/secret它奏效了。似乎只有 AU1 区域的 API 个密钥有此问题。当我在 US1 地区尝试使用 API 密钥时,它起作用了!

怀疑在撰写本文时它在 AU 地区还没有完全可用 - 请参阅 https://www.twilio.com/docs/global-infrastructure/regional-product-and-feature-availability#australia-au1-region