Изменение учетных данных на стороне клиента для базовой аутентификации во Flex - PullRequest
0 голосов
/ 22 апреля 2009

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 23 апреля 2009

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

Вы не можете фактически завершить "сеанс" 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, я уверен), и получить их таким образом, но есть хороший шанс, что вам даже не придется это делать.

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

0 голосов
/ 23 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...