FluorineFx.NET的认证(Authentication )与授权(Authorization)和ASP.NET中的大同小异,核实用户的身份既为认证,授权则是确定一个用户是否有某种执行权限,应用程序可根据用户信息授予和拒绝执行。FluorineFx.NET的认证和授权使用.Net Framework基于角色的安全性的支持。
比如说我们需要自定义一个认证与授权的方案,指定那些远程服务上的那些方法将要被认证或授权以及授权用户角色组等,我们就需要自定义一个LoginCommand并实现ILoginCommand接口或者继承于FluorineFx.Security.GenericLoginCommand(此类实现了ILoginCommand接口)基类。接口定义如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1namespaceFluorineFx.Security
2{
3publicinterfaceILoginCommand
4{
5IPrincipalDoAuthentication(stringusername,Hashtablecredentials);
6boolDoAuthorization(IPrincipalprincipal,IListroles);
7boolLogout(IPrincipalprincipal);
8voidStart();
9voidStop();
10}
11}
网关通过调用该接口中的方法DoAuthentication()来实现验证,具体的验证规则我们可以自定义(重写方法的实现)。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1///<summary>
2///自定义LoginCommand
3///</summary>
4publicclassLoginCommand:GenericLoginCommand
5{
6publicoverrideIPrincipalDoAuthentication(stringusername,Hashtablecredentials)
7{
8stringpassword=credentials["password"]asstring;
9if(username=="admin"&&password=="123456")
10{
11//用户标识
12GenericIdentityidentity=newGenericIdentity(username);
13//角色数组
14GenericPrincipalprincipal=newGenericPrincipal(identity,newstring[]{"admin","privilegeduser"});
15returnprincipal;
16}
17else
18{
19returnnull;
20}
21}
22}
如上面代码块,检测用户是不是属于"admin"和"privilegeduser"两个角色组之一,否则则不能通过验证。要实现授权则是通过DoAuthorization()方法来实现,我们同样可以重写实现以满足自己的需求。
除此之外还需要service-config.xml,指定通过那一个LoginCommand来执行认证与授权,以及要被授权的方法和角色组,login-command的class指向自定义的LoginCommand.
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><security>
<security-constraintid="privileged-users">
<auth-method>Login</auth-method>
<roles>
<role>admin</role>
<role>privilegeduser</role>
</roles>
</security-constraint>
<login-commandclass="FlexDotNet.ServiceLibrary.Authentication.LoginCommand"server="asp.net"/>
</security>
要使Flex能够调用认证与授权,同样需要提供一个远程服务接口,并为该接口添加RemotingServiceAttribute描述:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1namespaceFlexDotNet.ServiceLibrary.Authentication
2{
3///<summary>
4///远程服务LoginService
5///</summary>
6[RemotingService]
7publicclassLoginService
8{
9publicLoginService()
10{}
11
12///<summary>
13///登录
14///</summary>
15///<returns></returns>
16publicboolLogin(stringuserName,stringpassword)
17{
18if(userName=="admin"&&password=="123456")
19{
20//doother
21returntrue;
22}
23else
24{
25//doother
26returnfalse;
27}
28}
29
30///<summary>
31///注销
32///</summary>
33///<paramname="userName">用户名</param>
34///<returns></returns>
35publicboolLogout(stringuserName)
36{
37GenericIdentityidentity=newGenericIdentity(userName);
38GenericPrincipalprincipal=newGenericPrincipal(identity,newstring[]{"admin","privilegeduser"});
39
40if(newLoginCommand().Logout(principal))
41returntrue;
42returnfalse;
43}
44}
45}
在Flex或Flash端就可以通过RemoteObject来访问远程对象,Flex的访问配置如下代码块:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><mx:RemoteObjectid="loginService"destination="login">
<mx:methodname="Login"result="onLoginResult(event)"fault="onLoginFault(event)"/>
</mx:RemoteObject>
通过配置RemoteObject指定访问login这个配置的远程服务,服务里配置了一远程方法Login,并分别定义了访问成功和失败的处理函数。上面的RemoteObject访问的目的地为login配置的目的地,详细配置在remoting-config.xml里,如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><destinationid="login">
<properties>
<source>FlexDotNet.ServiceLibrary.Authentication.LoginService</source>
</properties>
</destination>
FlexDotNet.ServiceLibrary.Authentication.LoginService为自定义的一个远程服务(标记为RemotingService)接口,通过配置访问目的地,Flex远程对象组件利用此目的地通过FluorineFx网关调用远程服务接口方法。
布局Flex界面,模拟登录验证的调用,Flex通过setCredentials()方法请求,详细如下代码块:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->privatefunctionLogin():void
{
loginService.logout();
loginService.setCredentials(txtName.text,txtPassword.text);
loginService.Login();
}
<?xmlversion="1.0"encoding="utf-8"?>
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute">
<mx:Script>
<![CDATA[
importmx.utils.ObjectUtil;
importmx.controls.Alert;
importmx.rpc.events.FaultEvent;
importmx.rpc.events.ResultEvent;
privatefunctionLogin():void
{
loginService.logout();
loginService.setCredentials(txtName.text,txtPassword.text);
loginService.Login();
}
privatefunctionLogout():void
{
loginService.logout();
}
privatefunctiononLoginResult(evt:ResultEvent):void
{
varresult:Boolean=evt.resultasBoolean;
if(result)
Alert.show("登录验证成功");
}
privatefunctiononLoginFault(evt:FaultEvent):void
{
Alert.show(ObjectUtil.toString(evt.fault),"登录验证失败");
}
]]>
</mx:Script>
<mx:RemoteObjectid="loginService"destination="login">
<mx:methodname="Login"result="onLoginResult(event)"fault="onLoginFault(event)"/>
</mx:RemoteObject>
<mx:Panelx="124"y="102"width="250"height="200"layout="absolute"fontSize="12"title="用户登录">
<mx:Labelx="19"y="28"text="用户名:"/>
<mx:Labelx="19"y="72"text="密码:"/>
<mx:TextInputx="75"y="26"width="131"id="txtName"/>
<mx:TextInputx="75"y="69"width="131"id="txtPassword"displayAsPassword="true"/>
<mx:HBoxx="75"y="107"width="131"height="30">
<mx:Buttonlabel="登录"click="Login()"/>
<mx:Buttonlabel="清空"/>
</mx:HBox>
</mx:Panel>
</mx:Application>
分享到:
相关推荐
总结来说,***为.NET平台上的Flex应用程序提供了一套完整的认证与授权解决方案。通过实现自定义的LoginCommand类,结合.NET Framework的安全机制,开发者能够构建出既安全又灵活的应用系统。同时,***也保留了与***...
本实例代码涵盖了Flex与.NET互操作的多个方面,包括虚拟角色(fluorineFxVR)、服务对象(fluorineFxSO)、服务器RPC(fluorineFxServerRPC)以及聊天应用(fluorineFxChat)。以下是这些关键知识点的详细解释: 1....
Flex与.NET互操作系列文章的第十一部分主要探讨了FluorineFx.NET框架下的远程过程调用(RPC)机制,这是一种实现客户端(Flash或Flex)与服务器端(.NET)高效通信的方法。FluorineFx.NET为跨平台交互提供了强大的...
Flex与.NET通信的FluorineFx模板是一个关键的技术实现,它使得基于Adobe Flex的前端应用能够有效地与后端的.NET Framework服务进行交互。FluorineFx是这个过程中的核心工具,它是一个开放源码的库,专门设计用于解决...
Flex与.NET互操作的核心在于 FluorineFx.Net 框架,它允许 Flex 客户端与 .NET 服务端进行高效的数据交换。本篇主要关注的是 Remote Shared Objects(远程共享对象),这是一个强大的功能,用于在多客户端之间实现...
Flex与.NET交互是一种常见的跨平台应用开发场景,它允许基于Adobe Flex的前端应用程序与Microsoft .NET框架后端服务进行通信。这种交互使得开发者能够利用Flex的富互联网应用(RIA)特性与.NET的强大后端功能相结合...
【Flex与ASP.NET交互】指的是在开发Web应用时,使用Adobe Flex前端技术和Microsoft ASP.NET后端技术进行数据通信的方式。Flex是一种用于构建富互联网应用程序(RIA)的开发框架,而ASP.NET是.NET Framework的一部分...
FluorineFX是将Flex与.NET Framework连接的关键组件。它实现了Adobe的Action Message Format (AMF),这是一种高效的数据交换协议,用于在Flex客户端和ASP.NET服务器之间传输数据。通过AMF,可以实现低延迟、高效的...
标题中的“Flex(PureMVC) asp.net FluorineFx操作数据库”表明这是一个关于使用Adobe Flex(一种基于ActionScript的前端开发框架)与后端ASP.NET通过FluorineFx进行数据交互并操作数据库的项目。以下是相关知识点的...
***是基于.NET平台的一个开源框架,用于实现实时通信(real-time communication)应用,尤其在Flash/Flex客户端与.NET服务端之间的通信。它允许开发者构建基于RTMP(Real Time Messaging Protocol)或AMF(Action ...
在本文中,我们将深入探讨如何利用FluorineFx.Net框架来实现视频录制与回放功能。FluorineFx.Net是一个强大的工具,它不仅提供了AMF(Action Message Format)通信、RTMP(Real-Time Messaging Protocol)协议、RPC...
FluorineFx 是一个开源的AMF(Action Message Format)网关,它可以将Flex与ASP.NET无缝对接,提供高效的二进制数据传输,提高了应用性能。 首先,我们需要理解Flex和ASP.NET各自的角色。Flex作为客户端展示层,...
Flex与.NET互操作是开发跨平台富互联网应用(RIA)时常见的需求,FluorineFx作为一款开源的Adobe Flex到.NET互操作框架,极大地简化了这一过程。本文将深入探讨如何利用FluorineFx配置环境,实现Flex与.NET之间的...
在探讨Flex与.NET互操作的系列文章中,本篇文章主要围绕如何使用FluorineFx网关实现远程访问展开。FluorineFx是一个开源的.NET Remoting与Flash Remoting网关,它允许.NET应用程序和Adobe Flex应用程序之间进行远程...
4. **Flex与.NET通信**:理解AMF的工作原理,以及如何定义数据模型在客户端和服务器之间进行序列化和反序列化。 5. **服务接口设计**:在.NET中定义服务接口,这些接口将在Flex客户端通过FluorineFX调用,实现数据...
3. FluorineFx:这是.NET平台上流行的Flex与.NET通信框架,用于实现在Flex应用和ASP.NET服务之间的AMF(Action Message Format)数据交换。 4. Microsoft Visual Studio Team System 2008:这是.NET开发的主要IDE,...