GoDaddy Domain API创建CNAME记录遇ACCESS_DENIED错误求助
排查GoDaddy Domain API创建CNAME记录时的ACCESS_DENIED错误
问题描述
尝试通过GoDaddy Domain API动态注册子域名CNAME记录时,持续收到权限错误:
Error creating CNAME record: { code: 'ACCESS_DENIED', message: 'Authenticated user is not allowed access' } Error creating restaurant: Error creating CNAME record
已获取GoDaddy开发者平台的API Key和Secret Key,本地开发用ngrok暴露服务,使用Axios发送请求的代码如下:
const axios = require('axios'); const createSubdomain = async (subdomain) => { const domain = process.env.DOMAIN; const apiKey = process.env.GODADDY_API_KEY; const apiSecret = process.env.GODADDY_API_SECRET; if (!apiKey || !apiSecret) { throw new Error('API key or secret is not provided in environment variables.'); } const url = `https://api.godaddy.com/v1/domains/${domain}/records`; const headers = { Authorization: `sso-key ${apiKey}:${apiSecret}`, 'Content-Type': 'application/json' }; const ngrokUrl = '075c-190-8-35-73.ngrok-free.app'; const body = [ { type: 'CNAME', name: subdomain, data: ngrokUrl, ttl: 600 } ]; try { const response = await axios.patch(url, body, { headers }); if (response.status === 200 || response.status === 201) { console.log('CNAME record created successfully for:', subdomain); return true; } else { throw new Error(`Failed to create CNAME record. Status: ${response.status}`); } } catch (error) { console.error('Error creating CNAME record:', error.response?.data || error.message); throw new Error('Error creating CNAME record'); } }; module.exports = createSubdomain;
排查与修复步骤
1. 确认API Key的权限范围
- 登录GoDaddy开发者平台,检查创建API Key时是否勾选Domain Management的读写权限(至少需要Write权限)。默认生成的Key可能仅包含只读权限,无法修改DNS记录。
- 确保API Key关联的账户是目标域名的所有者,或具有该域名管理权限的子账户。
2. 验证凭证与环境变量
- 检查
process.env.GODADDY_API_KEY和process.env.GODADDY_API_SECRET是否正确加载,无多余空格、换行符。可临时打印这两个值(注意不要泄露)确认格式无误。 - 确认Authorization头格式正确:
sso-key ${apiKey}:${apiSecret},无拼写错误(如顺序颠倒、多写冒号等)。
3. 匹配API环境(测试/生产)
- GoDaddy API分测试环境(
https://api.ote-godaddy.com)和生产环境(https://api.godaddy.com)。测试环境生成的Key只能操作测试域名(如example.test),生产Key必须使用生产环境地址,混用会触发权限错误。
4. 调整API请求方法与端点
- 创建新DNS记录建议使用PUT方法而非PATCH(PATCH用于更新现有记录,PUT支持覆盖或创建),将
axios.patch改为axios.put尝试解决问题。 - 可使用更精确的端点:
https://api.godaddy.com/v1/domains/${domain}/records/CNAME/${subdomain},避免批量操作的权限限制。
5. 检查域名DNS管理状态
- 确认目标域名使用GoDaddy默认DNS服务器。若域名已切换到第三方DNS服务,GoDaddy API无法修改其记录,会返回权限错误。登录GoDaddy域名后台查看DNS设置即可确认。
6. 测试基础API连通性
- 先发送GET请求调用
https://api.godaddy.com/v1/domains/${domain}/records获取当前DNS记录。若GET请求也返回ACCESS_DENIED,说明凭证或权限本身存在问题;若GET成功,则是PUT/PATCH操作的权限或方法问题。
内容的提问来源于stack exchange,提问作者Edwin Then
相关产品推荐
相关产品推荐

