Изменение учетных данных на стороне клиента для базовой аутентификации во Flex

Я хочу, чтобы пользователь автоматически повторно входил в мое приложение Flex, которое использует базовую аутентификацию

Кстати, я отметил этот вопрос Stackru, который актуален, но не затрагивает вопрос выхода из системы на стороне клиента.

Например, после входа пользователя A пользователь B заходит в браузер, переходит на экран входа в систему (возможно, в новой вкладке) и входит в систему.

Это должно означать, что я отправляю учетные данные пользователя B в заголовках HTTP, и поскольку они отличаются от учетных данных пользователя A, сервер отмечает этот факт и создает новый отдельный сеанс.

Однако HTTP-прокси Flex перехватывает заголовок и фактически игнорирует эти новые учетные данные.

Flex действительно предлагает способ сообщить серверу о выходе из системы, и код входа в систему Flex может вызывать его каждый раз перед отправкой учетных данных, но это кажется уродливым обходным решением. Я хочу быть в состоянии сделать это на стороне клиента. Я также мог бы использовать нестандартный заголовок для базовой аутентификации (так как я также контролирую аутентификацию на стороне сервера), но это также кажется уродливым обходным путем.

Есть ли способ просто завершить сеанс на стороне клиента из кода Flex? Это возможно из JavaScript, например.

И есть ли способ напрямую работать с куки на стороне клиента, как я могу в JavaScript?

Я понимаю, что некоторые из ограничений могут быть вызваны соображениями безопасности, но все мое общение происходит с "домашним" сервером, поэтому должна быть возможность избежать ограничений.

2 ответа

Вы вроде задаете пару разных вопросов здесь.

Вы не можете фактически завершить "сеанс" basic-auth вручную как таковой (по крайней мере, насколько мне известно); в лучшем случае вы можете проходить аутентификацию на основе переменной области basic-auth, которая может работать, а может и не работать, но в противном случае вы как бы застряли в сеансе с первой аутентификацией на время экземпляра браузера. Как правило, это не лучший способ, если вы не уверены, что пользователь владеет машиной, или от него зависит, закрывать ли браузер после каждого сеанса.

Это оставляет по крайней мере два других варианта. Во-первых, отправьте свои учетные данные с помощью объекта URLRequest (в цитируемом вами посте, который я написал, показано, как это сделать), и чтобы ваш HTTP-ответ вручил что-то, указывающее, что учетные данные были приняты - например, GUID, возможно, сгенерированный и сохраненный в некоторой сеансовой таблице (в смысле базы данных) на сервере, возможно. Затем при последующих HTTP-запросах вы можете отправить этот GUID в заголовке HTTP или в качестве значения в каждом запросе GET или POST (например, как Facebook обрабатывает своих клиентов API), проверить своевременность этого значения в сервер, и если все хорошо, продолжайте. Чтобы "выйти", нужно просто отправить запрос на аннулирование этого GUID, выполнить необходимую очистку на сервере и внутри приложения Flex, и все должно быть в порядке: следующий пользователь может сесть, войти в систему, аутентифицироваться, и процесс продолжается.

Другим способом было бы работать с файлами cookie напрямую. Механизмы cookie на самом деле обрабатываются в основном для вас во Flex, поскольку браузер от вашего имени передает все назад и вперед. Например, если вы отправите URLRequest с именем пользователя и паролем, а сервер ответит файлом cookie любого типа, каждый последующий запрос будет упаковывать и отправлять один и тот же файл cookie, поэтому в большинстве случаев все, что вам нужно сделать, это проанализируйте начальный ответ с сервера (чтобы установить состояние вашего приложения Flex), предположите, что cookie-файл постоянно присутствует, а когда пришло время выйти из системы, отправьте URLRequest для выхода из системы, уничтожьте cookie-файл на сервере, в состоянии =200 выполните очистку вашего Flex-приложения и так далее. Прямой доступ к значениям cookie не самая простая вещь в мире; Вы можете использовать ExternalInterface в качестве прокси для JavaScript (примеры этого в Интернете и здесь, на SO, я уверен), и получить их таким образом, но есть хороший шанс, что вам даже не придется это делать.

Надеюсь, это поможет. Удачи!

Обратите внимание также на этот пост, в котором подробно описываются некоторые невероятные искажения, которые Flex добавляет в HTTP-запросы.

Другие вопросы по тегам