Почему LiveId Web Auth требует подтверждения удаления cookie с помощью ответа IMAGE/GIF?
В сценарии LiveId Web Auth, когда клиентское приложение получает запрос "clearcookie", оно отвечает за очистку файлов cookie авторизации и должно подтвердить успех, вернув любое изображение GIF через http. Использование эталонной реализации liveid web auth в asp.net-mvc выглядит следующим образом:
if (Request["action"]=="clearcookie")
{
string contentType;
byte[] content;
wll.GetClearCookieResponse(out contentType, out content);
return this.File(content, contentType);
}
Где wll.GetClearCookieResponse реализован как:
public void GetClearCookieResponse(out string type, out byte[] content)
{
const string gif =
"R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7";
type = "image/gif";
content = Convert.FromBase64String(gif);
}
Таким образом, метод GetClearCookieResponse создает массив byte[], связывающий крошечный жесткий код GIF.
Есть ли какая-то конкретная причина, почему требуется ответ с GIF? Почему не просто текст ("ОК") или JSON?
Существуют ли какие-либо другие (кроме LiveId) протоколы, использующие возвращаемый GIF в качестве ответа? Я спрашиваю, потому что я хочу знать, есть ли какая-либо причина для применения этого решения в проектах, требующих аналогичных сценариев общения.
1 ответ
Когда пользователь выходит из приложения Windows Live или Windows Live, делается все возможное, чтобы выйти из всех других приложений Windows Live, в которые может войти пользователь. Это делается путем вызова страницы обработчика для каждого приложения с параметром 'action', установленным в 'clearcookie' в строке запроса. Затем обработчик приложения отвечает за очистку любых файлов cookie или данных, связанных с логином. После успешного выхода пользователя обработчик должен вернуть GIF (любой GIF) в ответ на запрос action=clearcookie.
Эта функция возвращает соответствующий тип содержимого и ответ тела, которые может вернуть обработчик приложения, чтобы обозначить успешный выход из приложения.
Ваш код должен возвращать только изображение (.gif), как указано, и ничего больше. Дополнительный байт вызовет ошибку (искаженное изображение).
Я предполагаю, что это может быть любой ожидаемый ответ, и подозреваю, что они выбрали GIF, потому что это заставит браузер быстро повесить соединение при получении.