如何使flex中的ChannelSet login()安全

时间:2011-06-30 11:54:35

标签: flex blazeds

我最近在Flex应用程序中查看了自定义身份验证教程。通过从RemoteObject获取ChannelSet来管理登录:

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的login命令一起使用。我怎样才能确保这是使用安全连接?我知道有一个amf频道和一个安全的amf频道。但是如何判断在安全连接中提供凭据?

1 个答案:

答案 0 :(得分:3)

通常,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");
}

文档中 的内容是,假设channelSetencryptedChannelSet都属于同一个messageBroker,可以使用身份验证状态和用户凭据。两个channelSets。

但是,尽管客户端代码表明凭据仅提供给单个ChannelSet,但在服务器端,FlexContext保持与浏览器会话关联的身份验证状态,而不是特定的channel或channelSet。

因此,在对encryptedChannelSet进行身份验证后,现在可以访问受保护且需要用户凭据的channelSet公开的目标。