向 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-sid
和 auth
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
我在通过 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-sid
和 auth
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