Ask
26
@duckweed_dev ·

Sign in with Apple is failing for our users - how do I tell in five minutes whether it is Apple or us?

Support queue filling up with "cannot sign in with Apple". Two person team, no dedicated ops, and I want to know whose problem this is before I start changing things in production.

Context: everything else in the app is fine, we have not deployed since Tuesday, and it appears to be affecting web sign in while at least some people on iOS say it is working, though I do not trust that report yet.

What I would like is a checklist that separates "Apple is having a bad morning" from "something on our side quietly expired", because those have opposite responses. One you wait out and communicate, the other you fix. Doing the wait-it-out one when it is actually your config means an outage that lasts until someone gets bored, and doing the fix-it one during a real vendor incident means changing production for no reason and then not knowing which change fixed it.

7 answers Share
Report

Answering anonymously — a moderator will review it first.

  • @integral_ines · 2h ago · 2 replies

    Get the raw error body out of the token exchange and stop reasoning about your SDK's wrapper. Most auth libraries collapse several distinct failures into one generic "sign in failed" that tells you nothing.

    Once you have the raw body, the question usually answers itself: a 503 or a timeout is theirs, an OAuth error object with a specific code is yours. Log the raw body permanently if you do not already, because you will want it the next time too and the next time will also be at a bad moment.

    12
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
    • @chmod_confused · 2h ago

      Learned this the hard way last month. Our wrapper reported "network error" for what was a perfectly well formed error response with a code in it. Two hours in the wrong direction.

      4
      Share
      Reply

      Answering anonymously — a moderator will review it first.

      Report
  • @oncall_omar · 2h ago · 2 replies

    Shape test, in the order I would run it.

    Vendor outage looks like: 5xx responses, timeouts, or wildly variable latency. Affects every flow including native. Starts for everyone within the same couple of minutes. Error bodies are inconsistent between attempts.

    Your config looks like: instant failure, the identical error string every single time, one flow affected and not others, and it started at a suspiciously round moment.

    First thirty seconds: open Apple's developer system status page and look for the Sign in with Apple entry specifically, not the general one. Next thirty: retry and check whether the error body is byte identical. Deterministic identical errors are almost never an outage.

    16
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
    • @blue_team_bex · 2h ago

      And test from a network you do not control. Phone hotspot, a box in another region, anything. "It is down" has turned out to be our own DNS or our own egress rules more times than I would like to write down publicly.

      7
      Share
      Reply

      Answering anonymously — a moderator will review it first.

      Report
  • @flat_rate_finn · 2h ago

    Boring answer that resolves most of these: decode the client secret you have configured and read its exp.

    Apple's client secret is a JWT with a maximum lifetime of about six months, and when it lapses the token exchange fails deterministically with no warning and no notice from Apple. Web and Android flows break while native sign in can keep working, which matches exactly what you described about iOS still being fine.

    Do that before anything else. It is a ten second check and it is either your whole incident or it is ruled out.

    9
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
  • @teardown_tues · 2h ago

    Incident hygiene, since you said two person team and no ops: do not roll back a deploy that is not implicated. You have not deployed since Tuesday and this started today, so the deploy is not the cause and rolling it back only adds a variable.

    Keep a running note of what you checked and when. Not for the postmortem, for you in forty minutes, when you cannot remember whether you already tested from the hotspot.

    5
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report
  • @quietpackets · 2h ago

    Plot failure rate by minute and by platform before you form an opinion. The shape tells you more than the errors do.

    A vertical cliff at one timestamp, with one platform going to zero and others unaffected, is an expiry or a config change. A ragged ramp with partial success throughout, hitting everything, is an upstream incident. If you already have the data in a dashboard this takes a minute and it is the single most convincing artefact to put in front of whoever asks you what happened.

    8
    Share
    Reply

    Answering anonymously — a moderator will review it first.

    Report