Создание межсерверного ключа - важный первый шаг, но для выполнения HTTP-запросов после этого вы должны подписать каждый запрос.
Найдите Authenticate Web Service Requests Раздел в нижней части этой страницы документации .
Он немного запутан, но вам нужно тщательно создавать подписанные заголовки, чтобы включать их в каждый запрос, который вы делаете. Я не знаком с тем, как это сделать в Python, но вот как я это делаю в NodeJS, что может помочь:
//Get the timestamp in a very specific format
let date = moment().utc().format('YYYY-MM-DD[T]HH:mm:ss[Z]')
//Construct the subpath
let endpoint = '/records/lookup'
let path = '/database/1/iCloud.*****/development/public'
let subpath = path+endpoint
//Get the key file
let privateKeyFile = fs.readFileSync('../../'+SECRET_FILE_KEY, 'utf8')
//Make a string out of your JSON query
let query = {
recordType: '[my record type]'
}
let requestBody = JSON.stringify(query)
//Hash the query
let bodyHash = crypto.createHash('sha256').update(requestBody, 'utf8').digest('base64')
//Assemble the components you just generated in a special format
//[Current date]:[Request body]:[Web service URL subpath]
let message = date+':'+bodyHash+':'+subpath
//Sign it
let signature = crypto.createSign('RSA-SHA256').update(message).sign(privateKeyFile, 'base64')
//Assemble your headers and include them in your HTTP request
let headers = {
'X-Apple-CloudKit-Request-KeyID': KEY_ID,
'X-Apple-CloudKit-Request-ISO8601Date': date,
'X-Apple-CloudKit-Request-SignatureV1': signature
}
Сначала это немного сложно, но я просто поставил все это в функции, которую я повторно использую всякий раз, когда мне нужно сделать запрос.
Надеюсь, это поможет. Документация Apple в значительной степени заброшена, и в наши дни трудно найти хорошую помощь с веб-службами CloudKit.