第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

CloudKit 服務(wù)器到服務(wù)器身份驗(yàn)證:繼續(xù)獲取 401 身份驗(yàn)證失敗

CloudKit 服務(wù)器到服務(wù)器身份驗(yàn)證:繼續(xù)獲取 401 身份驗(yàn)證失敗

慕田峪7331174 2023-04-25 17:08:37
我最近一直在探索 CloudKit 和相關(guān)框架。我與我的應(yīng)用程序以及使用 CloudKitJS 的網(wǎng)站進(jìn)行了通信。我掙扎的地方是服務(wù)器到服務(wù)器的通信(我需要從csv中的公共數(shù)據(jù)庫(kù)導(dǎo)出數(shù)據(jù)。我已經(jīng)嘗試過(guò)其他人建議的Python 包requests-cloudkit 。我創(chuàng)建了一個(gè)服務(wù)器到服務(wù)器令牌,并且在創(chuàng)建 eckey.pem 文件后僅復(fù)制了 START 和 END 行之間的密鑰。然后我得到了這段代碼:from requests_cloudkit import CloudKitAuthfrom restmapper import restmapperimport jsonKEY_ID = '[my key ID from CK Dashboard]'SECRET_FILE_KEY = 'eckey.pem'AUTH = CloudKitAuth(KEY_ID, SECRET_FILE_KEY)PARAMS = {        'query':{                'recordType': '[my record type]'        },}CloudKit = restmapper.RestMapper("https://api.apple-cloudkit.com/database/1/[my container]/development/")cloudkit = CloudKit(auth=AUTH)response = cloudkit.POST.public.records.query(json.dumps(PARAMS))然后我收到401 身份驗(yàn)證失敗的響應(yīng)。我堅(jiān)持了好幾天,所以如果有任何幫助或建議,我將不勝感激。??
查看完整描述

1 回答

?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊

創(chuàng)建服務(wù)器到服務(wù)器密鑰是重要的第一步,但為了在此之后發(fā)出 HTTP 請(qǐng)求,您必須對(duì)每個(gè)請(qǐng)求進(jìn)行簽名。


這有點(diǎn)令人費(fèi)解,但您必須仔細(xì)構(gòu)建簽名標(biāo)頭以包含在您發(fā)出的每個(gè)請(qǐng)求中。我不熟悉如何在 Python 中執(zhí)行此操作,但這是我在 NodeJS 中執(zhí)行此操作的方法,這可能會(huì)有所幫助:

//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

}

起初這有點(diǎn)毛茸茸,但我只是將所有這些東西放在一個(gè)函數(shù)中,每當(dāng)我需要發(fā)出請(qǐng)求時(shí)我都會(huì)重用它。


Apple 的文檔幾乎已被廢棄,如今很難找到有關(guān) CloudKit Web 服務(wù)的好幫助。


查看完整回答
反對(duì) 回復(fù) 2023-04-25
  • 1 回答
  • 0 關(guān)注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)