Как обеспечить безопасность входа в ChannelSet () в flex - PullRequest
1 голос
/ 30 июня 2011

Недавно я посмотрел учебник по пользовательской аутентификации в приложении Flex. Вход в систему управляется путем получения ChannelSet из RemoteObject:

private function creationCompleteHandler():void {
            if (cs == null)
                cs = ServerConfig.getChannelSet(remoteObject.destination);                    
        }

// Login and handle authentication success or failure. 
private function ROLogin():void {
            // Make sure that the user is not already logged in.
            if (cs.authenticated == false) {
                token = cs.login("sampleuser", "samplepassword");
                // Add result and fault handlers.
                token.addResponder(new AsyncResponder(LoginResultEvent, LoginFaultEvent));
            }
        }

После этого channlset можно использовать с командой входа в ChannelSet. Как я могу убедиться, что это безопасное соединение? Я знаю, что есть канал AMF и безопасный канал AMF. Но как сказать, чтобы предоставить учетные данные в безопасном соединении?

1 Ответ

3 голосов
/ 30 июня 2011

Обычно ChannelSet определяется группой каналов, которые определяют стратегию восстановления после отказа, а не как часть безопасной / незащищенной сегментации.

Смешение зашифрованных и незашифрованных каналов в одном наборе каналов на самом деле не имеет смысла.

Если для channelSet определено несколько каналов, клиент Flex попытается подключиться по первому и постепенно переключиться на следующий, а затем до следующего, пока не будет установлено соединение или все каналы не будут исчерпаны.

Если вы хотите, чтобы были определены как защищенные, так и небезопасные каналы, вы обычно определяете два набора каналов - по одному для каждого:

<s:ChannelSet id="channelSet">
   <s:AMFChannel url="http://myserver:8080/myapp/messagebroker/amf" />
</s:ChannelSet>
<s:ChannelSet id="encryptedChannelSet">
   <s:SecureAMFChannel url="https://myserver:8080/myapp/messagebroker/amf" />
</s:ChannelSet>

public function logon():void
{
     // Credentials are passed via https
     encryptedChannelSet.login("username","password");
}

Что не ясно из документации, так это то, что при условии, что channelSet и encryptedChannelSet являются частью одного и того же MessageBroker, состояние аутентификации и учетные данные пользователя доступны для обоих наборов каналов.

Т.е., хотя клиентский код предполагает, что учетные данные предоставляются только одному ChannelSet, на стороне сервера FlexContext - это то, что содержит состояние аутентификации, которое связано с сеансом браузера, а не с конкретным каналом или ChannelSet.

Таким образом, после аутентификации encryptedChannelSet, назначения, которые подвергаются действию channelSet, которые защищены и требуют учетных данных пользователя, теперь доступны.

...