使用Vonage Server SDK发MMS遇401错误,求JWT认证实现指导
问题原因
@vonage/server-sdk 默认对SMS使用API密钥/密码认证,但Vonage Messages API(包含MMS)要求使用JWT认证——这就是你能正常发送SMS但MMS报401的核心原因。
解决方案:配置SDK使用JWT认证
1. 准备必要信息
你需要提前获取:
- Vonage应用ID(创建应用时生成)
- 应用对应的私钥(创建应用时下载的
.pem文件) - 已关联到该应用的发送号码(FROM_NUMBER)
2. 初始化带JWT认证的Vonage客户端
有两种方式配置JWT认证:
方式一:让SDK自动生成并管理JWT
直接传入应用ID和私钥,SDK会自动处理JWT的生成与刷新逻辑:
const { Vonage, Image } = require('@vonage/server-sdk'); const fs = require('fs'); const vonage = new Vonage({ applicationId: '你的Vonage应用ID', privateKey: fs.readFileSync('./path/to/your/private.key', 'utf8') // 读取本地私钥文件 });
方式二:手动生成JWT后传入
如果需要自定义JWT的有效期等参数,可以用@vonage/jwt工具生成后传入:
const { Vonage, Image } = require('@vonage/server-sdk'); const { generateJwt } = require('@vonage/jwt'); const fs = require('fs'); // 生成JWT,可自定义有效期等参数 const jwt = generateJwt({ applicationId: '你的Vonage应用ID', privateKey: fs.readFileSync('./path/to/your/private.key', 'utf8'), expiresIn: '24h' // 可选,设置JWT有效期为24小时 }); const vonage = new Vonage({ jwt: jwt });
3. 发送MMS的代码
使用上述初始化好的客户端,原发送代码无需大幅修改:
const IMAGE_URL = '你的图片资源URL'; const TO_NUMBER = '接收方号码(需带国家码)'; const FROM_NUMBER = '已关联应用的发送号码'; vonage.messages.send( new Image({ url: IMAGE_URL }, TO_NUMBER, FROM_NUMBER) ) .then(resp => console.log('MMS发送成功,消息UUID:', resp.message_uuid)) .catch(err => console.error('发送失败:', err));
关键注意事项
- 确保发送号码(FROM_NUMBER)已正确关联到你的Vonage应用
- 私钥文件内容要完整,不要遗漏开头的
-----BEGIN PRIVATE KEY-----和结尾的-----END PRIVATE KEY----- - 若仍报错,检查应用是否已启用Messages API权限
内容的提问来源于stack exchange,提问作者vinoth87
相关产品推荐
相关产品推荐

