【问题标题】:401 Error on CloudKit Server-to-Server Authentication on Node JSNode JS 上的 CloudKit 服务器到服务器身份验证出现 401 错误
【发布时间】:2020-09-02 02:01:51
【问题描述】:

我正在尝试使用服务器到服务器身份验证来查询我的公共 CloudKit 数据库。我已经根据 Apple 的文档生成了密钥,但无论我做什么,我都会收到此错误:

401 - Unauthorized

data: {
  uuid: '...',
  serverErrorCode: 'AUTHENTICATION_FAILED',
  reason: 'no auth method found'
}

据我所知,我已经设置好了per the docs,但显然我做错了什么。到目前为止,这是我的 Node 应用程序中的内容:


let date = moment().format('YYYY-MM-DD[T]HH:mm:ss[Z]')
let domain = 'https://api.apple-cloudkit.com'
let subpath = '/database/1/iCloud.<my container>/development/public/users/current'

let key = fs.readFileSync(__dirname +'/../eckey.pem', 'utf8')
let keyID = 'abc123...'

let requestBody = ''
let bodyHash = crypto.createHash('SHA256').update(requestBody).digest('base64')

let message = date+':'+bodyHash+':'+subpath

let signature = crypto.createSign('RSA-SHA256').update(message).sign(key, 'base64')

let headers = {
  'X-Apple-CloudKit-Request-KeyID': keyID,
  'X-Apple-CloudKit-Request-ISO8601Date': date,
  'X-Apple-CloudKit-Request-SignatureV1': signature
}

try{
  await axios.post(domain+subpath, requestBody, { headers: headers })
  console.log('--- :) ---')
}catch(error){
  console.log('=== :( ===')
  console.log(error)
}

我已经审查了this helpful SO post,但我仍然卡住了。

谁能看出我做错了什么?

【问题讨论】:

    标签: cloudkit cloudkit-web-services server-to-server cloudkit-js


    【解决方案1】:

    我必须做大量的故障排除才能解决这个问题,但为了后代,这就是我的错误:

    === 修复 #1 ===

    我的日期生成的本地时间不准确,因为格式暗示 Zulu/UTC 时间(因为 Z)。

    解决方法是将.utc() 添加到 Moment:

    let date = moment().utc().format('YYYY-MM-DD[T]HH:mm:ss[Z]')
    

    === 修复 #2 ===

    显然 Axios 不喜欢我格式化请求的方式。将其更改为此(baseURLurl 分开)有效:

    let response = await axios({ 
      method: 'post', 
      baseURL: baseURL, 
      url: '/records/modify', 
      data: query, 
      headers: headers 
    })
    

    有了这些修复,现在看起来效果很好。

    【讨论】:

    • 你能发布完整的工作代码吗?您的修复 #2 似乎是针对与原始问题不同的问题
    猜你喜欢
    • 2020-11-24
    • 2016-05-16
    • 2019-11-06
    • 2016-05-17
    • 1970-01-01
    • 2018-01-09
    • 2018-06-18
    • 2022-11-30
    • 2016-12-20
    相关资源
    最近更新 更多