У меня есть приложение, которое взаимодействует с сервером, который использует аутентификацию HTTP Digest.
Мне кажется, что управление «сеансами» в iPhone — довольно «черный ящик» для нас, разработчиков. Правда ли, что мы не можем видеть, как фреймворк обрабатывает/сохраняет http-сессии?
Если я просто тусклый, не мог бы кто-нибудь объяснить, как, вероятно, обрабатывать аутентификацию HTTP Digest на iPhone?
Мой основной прогон:
- Сделать запрос на защищенный URL
- Сервер отправляет 401
- клиент создает и сохраняет учетные данные и передает их обратно на сервер
- сервер проверяет учетные данные, завершает запрос, если он проверен, отправляет еще один 401, если нет.
- сделать последующий запрос на безопасный URL
- сервер снова запрашивает авторизацию........
Это работает для одиночных запросов, но если я делаю дополнительные последующие запросы, сервер снова запрашивает авторизацию. Сервер сохранил сеанс для конкретного пользователя, но iPhone по какой-то причине не делает запрос в рамках того же сеанса... Поэтому сервер должен выбрасывать объект аутентификации и создавать новый каждый раз, когда клиент делает запрос на защищенный URL.
Я уверен, что это неправильное поведение.
Если мы посмотрим, как ведет себя браузер в этой ситуации:
- Браузер запрашивает данные с безопасного URL
- сервер отправляет 401
- браузер запрашивает у пользователя учетные данные, сохраняет их, передает на сервер
- сервер проверяет учетные данные, возвращает данные, если они проверены, и отправляет еще один 401, если нет.
- последующие запросы, сделанные для защиты URL-адресов, не запрашивают учетные данные, поскольку браузер управляет сеансом.
Я создаю NSURLCredential и сохраняю его в NSURLCrendtialStorage. Затем, когда приложение получает «didReceiveAuthenticationChallenge», я извлекаю учетные данные из хранилища и передаю их обратно, создавая учетные данные, если они не существуют (по первому запросу).
Любая помощь будет принята с благодарностью. Спасибо.