Skip to content

Trusted-device bridge protocol changed, breaking 2FA #232

Description

@ebarrere

2FA fails on version 2.5.0 of the pyicloud code, because Apple no longer returns sessionUUID in the bridge push payload:

Bridge push payload keys: ['aps', 'cmd', 'adsid', 'atxnid', 'txnid', 'akdata', 'nextStep', 'odi', 'flowid']

Environment

$ uv pip show pyicloud
Name: pyicloud
Version: 2.5.0
Location: /Users/elliott/Documents/code/personal/pyicloud/.venv/lib/python3.14/site-packages
Requires: certifi, click, cryptography, fido2, keyring, keyrings-alt, protobuf, pydantic, requests, rich, srp, tinyhtml, typer, tzlocal
Required-by:

Traceback/Error logs

Traceback (most recent call last):
  File "/Users/elliott/Documents/code/personal/pyicloud/.venv/lib/python3.14/site-packages/pyicloud/hsa2_bridge.py", line 212, in from_payload
    validated = _BridgePushPayloadModel.model_validate(payload)
  File "/Users/elliott/Documents/code/personal/pyicloud/.venv/lib/python3.14/site-packages/pydantic/main.py", line 732, in model_validate
    return cls.__pydantic_validator__.validate_python(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        obj,
        ^^^^
    ...<5 lines>...
        by_name=by_name,
        ^^^^^^^^^^^^^^^^
    )
    ^
pydantic_core._pydantic_core.ValidationError: 1 validation error for _BridgePushPayloadModel
sessionUUID
  Field required [type=missing, input_value={'aps': {'alert': ''}, 'c...4E1C-8896-87004D71B462'}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.13/v/missing

Additional information

I have a patch that is working for me. I'll open a PR shortly.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions