Лучшее, что я могу предложить, - это код состояния HTTP 401 с заголовком WWW-Authenticate.
Проблема с запросами 403 - это RFC 2616. говорится: «Авторизация не поможет, и запрос НЕ ДОЛЖЕН повторяться». (т.е. не имеет значения, аутентифицированы вы или нет, вы никогда не получите доступ к этому ресурсу).
Проблема с запросом 401 заключается в том, что в нем говорится, что они «ДОЛЖНЫ включать поле заголовка WWW-Authenticate». Как кто-то заметил, использование настраиваемого значения в заголовке WWW-Authenticate не является нарушением спецификации.
Я не вижу причин в RFC 2617, почему статус HTTP 401 в сочетании с настраиваемым заголовком WWW-Authenticate вроде этого не подходит:
WWW-Authenticate: MyAuthScheme realm="http://example.com"
Спецификация oAuth на самом деле, кажется, делает именно это, поскольку они рекомендуют это (хотя, на мой взгляд, они имеют странную интерпретацию RFC):
WWW-Authenticate: OAuth realm="http://server.example.com/"
Это не выглядит специально САНКЦИОННЫМ RFC, но я на самом деле не вижу, что это запрещено им (похоже, это не противоречит каким-либо условиям ДОЛЖЕН или НЕ ДОЛЖЕН, ДОЛЖЕН или НЕ ДОЛЖЕН).
Я бы хотел, чтобы был более конкретный код состояния HTTP для тайм-аутов и таких вещей, как недействительные токены CSRF, чтобы это было яснее.