setup.icloud.com两步验证

Sha*_*yan 5 python backup ios icloud

我正在玩iLoot,这是一个开源应用程序,让你下载iCloud备份,我想知道如何实现双因素身份验证.

我的帐户启用了2fa,第一次请求的内容是:

第一个要求:

        auth = "Basic %s" % base64.b64encode("%s:%s" % (login, password))
authenticateResponse = plist_request("setup.icloud.com", "POST", "/setup/authenticate/$APPLE_ID$", "", {"Authorization": auth})
Run Code Online (Sandbox Code Playgroud)

plist_request只是一个普通的python(请求)函数,它从url请求并返回解析的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
Run Code Online (Sandbox Code Playgroud)

如果有人知道下一次调用将输入两步验证码的话,它可能有助于弄清楚.

Ben*_*riu 6

我是一个iOS系统人员,不是后端人员,但是后端团队使用应用专用密码而不是令牌解决了这一问题。

用户可以通过这种方式生成特定于应用程序的密码:生成特定于应用程序的密码

然后,只需使用电子邮件和此密码,而不使用dsPrsID:mmeAuthToken形成的令牌。正如我为队友了解的那样,您不必进行base64编码,只需使用该新密码和url:' https : //caldav.icloud.com/ '

希望这可以帮助。这对我们来说是一场噩梦,互联网上根本没有帮助。

更新

有关更多信息,这些是我一边使用(iOS)的步骤:

  1. 我将https://setup.icloud.com/setup/authenticate/ “ email@email.com”称为“基本电子邮件:密码”,将base64字符串设置为“ Authorization” http标头字段。

  2. 我检查响应状态代码。如果为401,则表示您发送的密码是应用专用密码,因此我通过内部API直接将此密码(和电子邮件)发送到我的服务器,然后他们使用它来调用iCloud API,并返回我的日历等

  3. 如果响应状态代码为409,则表示该用户尝试使用普通密码登录,但是其帐户启用了2fa,并且显示了一个错误,警告用户继续获取其应用专用密码,然后使用该密码,这将导致上面的步骤2。

我并不是说这是唯一的方法,但这对我有用。另外,我也不完全知道服务器端发生了什么,但是他们直接使用特定于应用程序的密码(可能还有电子邮件)来完成这项工作。