n8n-nodes-boltx-jwt
v0.1.0
Published
n8n community node — JWT sign/verify/decode với privateKey/secret động per-item (multi-tenant). Khớp type với goworker custom executor.
Downloads
152
Maintainers
Readme
n8n-nodes-boltx-jwt
Community node n8n cho JWT sign / verify / decode với privateKey / secret động per-item qua expression — multi-tenant: khoá đến từ DB row, không phải credential cố định.
Type khớp 1-1 với executor native goworker (worker/internal/engine/node_boltx_jwt.go, type n8n-nodes-boltx-jwt.jwt). Workflow viết 1 lần chạy đúng trên cả 2 runtime:
- n8n native → execute bằng
jsonwebtokennpm. - goworker production → execute bằng
github.com/golang-jwt/jwt/v5Go native, không spawn Node.
Khác n8n-nodes-base.jwt
| | jwt chuẩn n8n | boltx-jwt |
|---|---|---|
| Khoá ký | Credential cố định (jwtAuth keyType=pemKey/passphrase) | Per-item từ expression ={{ $json.private_key }} |
| Multi-tenant N partner | Tạo N credentials + Switch | 1 node đọc thẳng PG firebase_config.private_key |
| Output sign | { token } | { token } (giống) |
| Output verify | { payload } hoặc { header, payload, signature } | Giống |
| Algorithms | HS*/RS*/ES*/PS* | HS*/RS*/ES*/PS* + none |
Use case: FCM service account JWT
Mỗi partner BĐS có 1 Firebase service account riêng lưu trong firebase_config (per-partner). Để bắn FCM HTTP v1, cần JWT RS256 sign với firebase_config.private_key đổi lấy access_token Google → KHÔNG thể static credential.
Workflow pattern:
PG fcm-data (SELECT firebase_config WHERE partner_code = ?)
→ JWT sign (BoltX)
operation: sign
algorithm: RS256
privateKey: ={{ $json.private_key }} ← per-item PEM từ DB
claimsJson: ={ "iss": $json.client_email,
"scope": "https://www.googleapis.com/auth/firebase.messaging",
"aud": $json.token_uri,
"exp": Math.floor(Date.now()/1000) + 3600 }
→ output: { token: "<assertion JWT 3-phần base64url>" }
→ HTTP POST $json.token_uri
grant_type = urn:ietf:params:oauth:grant-type:jwt-bearer
assertion = $('JWT sign').first().json.token
→ access_token Google
→ HTTP POST fcm.googleapis.com/v1/.../messages:send với Bearer access_tokenCài lên n8n self-host
Option A — Community Nodes UI (npm)
cd worker/node-raw/n8n-nodes-boltx-jwt && npm install --ignore-scripts && npm run build && npm publish --access public.- Trên n8n UI → Settings → Community Nodes → Install → paste
n8n-nodes-boltx-jwt→ Install. - Node hiện trong palette: "JWT (BoltX)" category Communication.
Option B — Mount thủ công
npm install --prefix ~/.n8n/nodes n8n-nodes-boltx-jwtRestart n8n.
Parameter
| Param | Áp dụng cho | Mô tả |
|---|---|---|
| operation | all | sign / verify / decode |
| algorithm | all | RS256 (default), RS384/512, HS256/384/512, ES256/384/512, PS256/384/512 |
| privateKey | sign (RS/ES/PS) | PEM private key qua expression |
| publicKey | verify (RS/ES/PS) | PEM public key qua expression |
| secret | sign/verify (HS) | HMAC secret |
| claimsJson | sign | Payload JSON. iat tự thêm nếu thiếu. |
| token | verify/decode | JWT string |
| options.kid | sign | kid header (optional) |
| options.complete | verify/decode | Trả { header, payload, signature } |
| options.ignoreExpiration | verify | Bỏ qua exp |
| options.ignoreNotBefore | verify | Bỏ qua nbf |
| options.clockTolerance | verify | seconds dung sai |
Build local
npm install --ignore-scripts
npm run build
npm run dev # watch mode