Agent Skillsfanfan-de/anybox › twilio-security-api-auth

twilio-security-api-auth

GitHub

指导选择并实现Twilio API的正确认证方式,涵盖Auth Token、API Key、OAuth2及Access Token。提供生产环境安全实践与代码示例,防止凭证泄露。

plugins/Anybox-Plugins/twilio-developer-kit/skills/twilio-security-api-auth/SKILL.md fanfan-de/anybox

Trigger Scenarios

需要调用Twilio API 配置Twilio客户端连接 处理Twilio身份验证

Install

npx skills add fanfan-de/anybox --skill twilio-security-api-auth -g -y
More Options

Non-standard path

npx skills add https://github.com/fanfan-de/anybox/tree/master/plugins/Anybox-Plugins/twilio-developer-kit/skills/twilio-security-api-auth -g -y

Use without installing

npx skills use fanfan-de/anybox@twilio-security-api-auth

指定 Agent (Claude Code)

npx skills add fanfan-de/anybox --skill twilio-security-api-auth -a claude-code -g -y

安装 repo 全部 skill

npx skills add fanfan-de/anybox --all -g -y

预览 repo 内 skill

npx skills add fanfan-de/anybox --list

SKILL.md

Frontmatter
{
    "name": "twilio-security-api-auth",
    "description": "Choose the right Twilio authentication method and implement it correctly. Covers Auth Token (testing only), API Keys (production standard), OAuth2 client_credentials (time-limited bearer tokens), Access Tokens (client-side SDKs), and test credentials. Use this skill before making any Twilio API calls in production."
}

Overview

Twilio supports four authentication methods. Choosing the wrong one is a security risk — Auth Tokens in production code are the most common credential leak.

Method Use for Token lifetime Revocable individually
Auth Token Local testing only Permanent (until rotated) No — rotation invalidates all integrations using that token and breaks webhook signature validation; API keys (SK-prefixed) are unaffected
API Key + Secret Production server-side Permanent (until deleted) Yes
OAuth2 Bearer Token Production server-side (enhanced) 1 hour Expires automatically
Access Token (JWT) Client-side SDKs (Voice, Video, Chat) Up to 24 hours No — delete issuing API key

Decision framework:

  • Building a quick prototype? → Auth Token (but switch to API Key before deploying)
  • Production server-side code? → API Key + Secret (simplest production auth) or OAuth2 (time-limited tokens)
  • Browser/mobile client needs to connect? → Access Token (JWT) generated server-side
  • Running tests without charges? → Test credentials with magic numbers

API Key Authentication (Production Standard)

Create: Console → Account → API keys & tokens → Create API key

Key type Access Create via
Main Full account access Console only
Standard All resources except /Accounts and /Keys endpoints Console or API
Restricted Specific resources only (up to 100 permissions) Console or v1 IAM API only

Python

import os
from twilio.rest import Client

client = Client(
    os.environ["TWILIO_API_KEY"],      # SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    os.environ["TWILIO_API_SECRET"],
    os.environ["TWILIO_ACCOUNT_SID"]   # required as third argument
)

Node.js

const client = require("twilio")(
    process.env.TWILIO_API_KEY,
    process.env.TWILIO_API_SECRET,
    { accountSid: process.env.TWILIO_ACCOUNT_SID }
);

OAuth2 Authentication (Client Credentials)

Time-limited bearer tokens that expire after 1 hour. More secure than permanent API keys for server-to-server communication.

Step 1 — Create an OAuth App

Create an OAuth App in the Twilio Console to get a Client ID and Client Secret.

Step 2 — Request a Bearer Token

cURL

curl -X POST 'https://oauth.twilio.com/v2/token' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id={ClientID}' \
  -d 'client_secret={ClientSecret}' \
  -d 'grant_type=client_credentials'

Response:

{
    "access_token": "{BearerToken}",
    "token_type": "Bearer",
    "expires_in": 3600
}

Step 3 — Use the Bearer Token

curl 'https://api.twilio.com/2010-04-01/Accounts/{AccountSID}/Messages.json' \
  -H 'Authorization: Bearer {BearerToken}'

SDK Support

OAuth2 is supported in all Twilio SDKs:

Language Minimum version
Java 10.6.0
C#/.NET 7.6.0
Node.js 5.4.0
Python 9.4.1
Ruby 7.4.0
PHP 8.5.0
Go 1.25.1

Docs: OAuth access tokens | Segment OAuth connections


Access Tokens (Client-Side SDKs)

Short-lived JWTs for authenticating browser/mobile clients. Generate server-side, pass to the client.

Python

from twilio.jwt.access_token import AccessToken
from twilio.jwt.access_token.grants import VoiceGrant

token = AccessToken(
    os.environ["TWILIO_ACCOUNT_SID"],
    os.environ["TWILIO_API_KEY"],
    os.environ["TWILIO_API_SECRET"],
    identity="user-123",
    ttl=3600
)
token.add_grant(VoiceGrant(outgoing_application_sid="APxxxx"))
print(token.to_jwt())

Grant types: VoiceGrant, VideoGrant, ChatGrant (Conversations), SyncGrant


Test Credentials

Make API calls without charges. Find at Console → Account → API keys & tokens → Test credentials.

Magic numbers: +15005550006 (valid), +15005550001 (invalid, error 21211), +15005550007 (no SMS, error 21612)


CANNOT

  • Standard keys cannot access /Accounts or /Keys endpoints — Returns 20003 (401). Use Auth Token or Main key.
  • Cannot create restricted keys via v2010 API — Silently creates a standard key instead. Use v1 IAM API.
  • Restricted keys cannot generate Access Tokens — Only Standard and Main keys can.
  • Cannot revoke individual Access Tokens — Valid until expiration (max 24h). Delete the issuing API key to revoke all.
  • OAuth2 only supports client_credentials grant — No refresh tokens, no authorization code flow.
  • OAuth2 tokens expire after 1 hour — Your application must handle token refresh.
  • API Key Secret shown only at creation — Cannot be retrieved afterward.
  • Auth Token rotation does not affect API keys — It invalidates all integrations using AccountSID:AuthToken and breaks webhook signature validation, but API keys (SK-prefixed) are independent and unaffected. This is why API keys are recommended for production from day one.
  • Test credentials work with only 4 endpoints — Messages, Calls, IncomingPhoneNumbers, Lookups. All others return 403.

Next Steps

  • Account setup and sub-accounts: twilio-account-setup
  • HIPAA account configuration: twilio-security-compliance-hipaa
  • Webhook signature validation: twilio-webhook-architecture
  • Credential security patterns: twilio-security-hardening

Version History

  • 08dc189 Current 2026-07-05 19:09

Same Skill Collection

.agents/skills/anybox-frontend-guidelines/SKILL.md
.agents/skills/anybox-mobile-release/SKILL.md
.agents/skills/anybox-plugin/SKILL.md
.agents/skills/deploy-anybox-tencent-docker-windows/SKILL.md
.agents/skills/deploy-anybox-tencent-server/SKILL.md
.agents/skills/fanfande-frontend-style/SKILL.md
.agents/skills/fanfande-plugin-structure/SKILL.md
.agents/skills/frontend-ui-style-kit/SKILL.md
.agents/skills/obsidian-like/SKILL.md
.agents/skills/pdf/SKILL.md
.agents/skills/transcribe/SKILL.md
.agents/skills/zhihu-md-publisher/SKILL.md
.anybox/skills/anybox-plugin-development/SKILL.md
.anybox/skills/anybox-start-dev/SKILL.md
packages/chrome-plugin/runtime/skills/chrome/SKILL.md
plugins/Anybox-Plugins/anybox-plugin-development/skills/anybox-plugin-development/SKILL.md
plugins/Anybox-Plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/SKILL.md
plugins/Anybox-Plugins/atlassian-rovo/skills/generate-status-report/SKILL.md
plugins/Anybox-Plugins/box/skills/box/SKILL.md
plugins/Anybox-Plugins/browser/skills/browser/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/ios-app-intents/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/ios-debugger-agent/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/ios-ettrace-performance/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/ios-memgraph-leaks/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/ios-simulator-browser/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/swiftui-liquid-glass/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/swiftui-performance-audit/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/swiftui-ui-patterns/SKILL.md
plugins/Anybox-Plugins/build-ios-apps/skills/swiftui-view-refactor/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/appkit-interop/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/build-run-debug/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/liquid-glass/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/packaging-notarization/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/signing-entitlements/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/swiftpm-macos/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/swiftui-patterns/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/telemetry/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/test-triage/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/view-refactor/SKILL.md
plugins/Anybox-Plugins/build-macos-apps/skills/window-management/SKILL.md
plugins/Anybox-Plugins/build-web-apps/skills/frontend-app-builder/SKILL.md
plugins/Anybox-Plugins/build-web-apps/skills/frontend-testing-debugging/SKILL.md
plugins/Anybox-Plugins/build-web-apps/skills/react-best-practices/SKILL.md
plugins/Anybox-Plugins/build-web-apps/skills/shadcn-best-practices/SKILL.md
plugins/Anybox-Plugins/build-web-apps/skills/supabase-best-practices/SKILL.md
plugins/Anybox-Plugins/canva/skills/canva-branded-presentation/SKILL.md
plugins/Anybox-Plugins/canva/skills/canva-resize-for-all-social-media/SKILL.md
plugins/Anybox-Plugins/canva/skills/canva-translate-design/SKILL.md
plugins/Anybox-Plugins/chrome/skills/chrome/SKILL.md
plugins/Anybox-Plugins/cinema/skills/initialize-cinema-project/SKILL.md

Metadata

Files
0
Version
b621dd3
Hash
7d8aa17b
Indexed
2026-07-05 19:09

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-03 21:40
浙ICP备14020137号-1 $Map of visitor$