协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
intercom-security-basics【开发与工程】Apply Intercom security best practices for tokens, webhook verification, and scopes. Use when securing access tokens, implementing webhook signature validation, or configuring least-privilege OAuth scopes. Trigger with phrases like "intercom security", "intercom secrets", "secure intercom", "intercom webhook signature", "intercom token rotation".
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: intercom-security-basics description: 'Apply Intercom security best practices for tokens, webhook verification, and scopes.
Use when securing access tokens, implementing webhook signature validation,
or configuring least-privilege OAuth scopes.
Trigger with phrases like "intercom security", "intercom secrets",
"secure intercom", "intercom webhook signature", "intercom token rotation".
' allowed-tools: Read, Write, Grep version: 1.6.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:
Security best practices for Intercom access tokens, webhook signature verification, Identity Verification (HMAC), and least-privilege OAuth scopes.
The full code for each control lives in references/ so this file stays a fast,
high-level checklist you can follow end-to-end, then drill into for depth:
Store every secret in .env (or a secret manager) and never commit it.
# .env (NEVER commit to git)
INTERCOM_ACCESS_TOKEN=dG9rOmFiY2RlZmdoaQ==
INTERCOM_WEBHOOK_SECRET=your-webhook-signing-secret
INTERCOM_IDENTITY_SECRET=your-identity-verification-secret
# .gitignore (mandatory entries)
.env
.env.local
.env.*.local
Then scan history for anything already leaked — use Grep (or the shell) to
search committed content for token markers:
git log --all -p | grep -i "INTERCOM_ACCESS_TOKEN\|dG9r" | head -5
# If found: rotate the token immediately, then use git-filter-repo to remove it.
Intercom signs webhook notifications with HMAC-SHA1 using X-Hub-Signature.
Verify it on every incoming webhook against the raw request body, using a
timing-safe comparison, and reject mismatches with 401:
const expectedSignature = "sha1=" + crypto
.createHmac("sha1", secret)
.update(payload) // payload = raw Buffer, not parsed JSON
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expectedSignature));
Full Express handler: implementation.md — Webhook Signature Verification.
Identity Verification blocks impersonation by requiring an HMAC-SHA256 of the user's identifier, generated server-side only:
crypto.createHmac("sha256", process.env.INTERCOM_IDENTITY_SECRET!)
.update(userId)
.digest("hex");
Return this user_hash alongside app_id and user_id for Messenger boot. Full
code: implementation.md — Identity Verification.
Only request the scopes your app actually uses — excess scopes widen the blast
radius of a leaked token. The full use-case → scope mapping is in
implementation.md — Least-Privilege OAuth Scopes.
For example, a read-only contacts integration needs just Read contacts, not
full CRM read/write.
Rotate by adding the new token to your secret manager and deploying before
revoking the old one, so no window exists without a live token. Full procedure
(AWS / GCP / Vault examples + verification curl): implementation.md — Token Rotation Procedure.
Applying this skill produces:
.env (or secret-manager entry) holding INTERCOM_ACCESS_TOKEN,
INTERCOM_WEBHOOK_SECRET, and INTERCOM_IDENTITY_SECRET, with .env patterns
added to .gitignore.200 for valid X-Hub-Signature deliveries and
401 for missing or forged signatures.user_hash generation wired into the Messenger boot settings.The end state is the completed Security Checklist below, every box ticked.
.env files in .gitignore| Security Issue | Detection | Mitigation |
|---|---|---|
| Leaked token in git | git log -p | grep dG9r | Rotate immediately, remove from history |
| Invalid webhook signature | 401 from verification | Check secret matches Developer Hub |
| Missing Identity Verification | Intercom dashboard warning | Implement user_hash on server |
| Excessive OAuth scopes | Scope audit | Remove unnecessary scopes |
| Token never rotated | Age tracking | Schedule quarterly rotation |
Four end-to-end walkthroughs live in references/examples.md:
.env
and prove none are staged.git log --all -p | grep for
token markers before shipping.401 via X-Hub-Signature.user_hash
to stop impersonation.Quick sanity check that a rotated token is live:
curl -s https://api.intercom.io/me \
-H "Authorization: Bearer $NEW_TOKEN" | jq '.type'
# Should return "admin"
For production deployment hardening beyond these basics, see the
intercom-prod-checklist skill, which covers rate limiting, error monitoring,
and staged rollout for the same integration.