setup.icloud.com 双重验证
我正在玩一个叫做 iLoot 的开源应用,这个应用可以让你下载iCloud的备份。我在想,怎么能把双重认证功能加到这个应用里呢。
我在我的账户上启用了双重认证,第一次请求时我得到了这个:
第一次请求:
auth = "Basic %s" % base64.b64encode("%s:%s" % (login, password))
authenticateResponse = plist_request("setup.icloud.com", "POST", "/setup/authenticate/$APPLE_ID$", "", {"Authorization": auth})
plist_request 只是一个普通的 Python (request) 函数,它从网址请求数据并返回解析后的 XML 格式。
第一次响应(XML格式):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>protocolVersion</key>
<string>2</string>
<key>title</key>
<string>Verification Required</string>
<key>localizedError</key>
<string>MOBILEME_TERMS_OF_SERVICE_UPDATE</string>
<key>message</key>
<string>This Apple ID is protected with two-step verification. To sign in, you must verify your identity.</string>
</dict>
</plist>
Request /setup/authenticate/$APPLE_ID$ returned code 409
如果有人知道接下来该怎么调用来输入双重验证代码,那可能会帮助我们搞清楚这个问题。
2 个回答
你需要把 $appliid$ 替换成你的 Apple ID... 然后你就能得到 mmeAuthToken 和 dsPrsID。
使用这个链接: https://setup.icloud.com/setup/get_account_settings, 用 dsPrsID 和 mmeAuthToken 作为基本认证。返回的结果是: mmeAuthToken(一个新的或其他的!)
接下来的请求获取备份信息对我来说没成功... 我现在还没到那一步...
我之前用过的一些文档:
https://www.elcomsoft.com/PR/recon_2013.pdf https://deepsec.net/docs/Slides/2013/DeepSec_2013_Vladimir_Katalov_-_Cracking_And_Analyzing_Apple_iCloud_Protocols.pdf
谢谢你的分享!让我找到了 iLoot。
我是做iOS的,不是后端开发的,但我的后端团队通过使用应用专用密码解决了这个问题,而不是用令牌。
用户可以这样生成应用专用密码:生成应用专用密码
然后只需使用邮箱和这个密码,而不是用dsPrsID:mmeAuthToken生成的令牌。根据我从同事那里了解到的,你不需要进行base64编码,只需使用那个新密码,网址是:'https://caldav.icloud.com/'
希望这对你有帮助。对我们来说,这真是一场噩梦,网上根本没有帮助。
更新
关于更多信息,这里是我在iOS上使用的步骤:
我调用了https://setup.icloud.com/setup/authenticate/"email@email.com",通过将“基本邮箱:密码”设置为base64字符串放入“Authorization”这个HTTP头字段。
我检查响应状态码。如果是401,说明你发送的密码是应用专用密码,那么我就直接把这个密码(和邮箱)发送到我的服务器,通过我们的内部API,他们用这个来调用iCloud的API,并返回我的日历等信息。
如果响应状态码是409,说明用户尝试用普通密码登录,但他的账户启用了双重认证,我会显示一个错误,提醒用户去获取他的应用专用密码,并使用那个,这样就会回到上面的第二步。
我并不是说这是唯一的方法,但对我来说这是有效的。此外,我不太清楚服务器端发生了什么,但他们直接使用那个应用专用密码(可能还有邮箱)来完成工作。