基于Silverlight的RIA架构及百度应用

4,220 views

Published on

Published in: Technology, Education
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,220
On SlideShare
0
From Embeds
0
Number of Embeds
806
Actions
Shares
0
Downloads
74
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • Browser-Based AuthN 如何在Silverlight中实现,有何缺陷
  • 跨域访问(Cross-Domain)默认是关闭的可以通过“cross-domain policy file”打开Browser-Based 认证只有以下场景才安全无跨域访问 或只访问有限的几个受信的域其他场景只有Message-Based认证才是安全的
  • <basicHttpBinding> <binding name="myBinding"> <security mode="TransportWithMessageCredential"> <message clientCredentialType="UserName"/> </security> <httpsTransport/> </binding> </basicHttpBinding>
  • 基于Silverlight的RIA架构及百度应用

    1. 1.
    2. 2. 基于Silverlight 的RIA架构及百度应用<br />杨丹<br />资深.NET架构师<br />微软(中国)<br />陈广琛<br />Web前端工程师<br />百度<br />
    3. 3. 议题<br />RIA与应用平台趋势<br />Silverlight 应用架构<br />界面模型<br />逻辑分层<br />网络访问<br />安全机制<br />百度Silverlight应用<br />
    4. 4. RIA与应用平台趋势<br />纯Web<br />在Web上实现<br />通过Web部署<br />界面更美观<br />像桌面应用<br />动画 多媒体<br />开发更高效<br />面向对象语言<br />美工技术协同<br />Richness<br />Web<br />Desktop<br />RIA<br />Win Form<br />HTML<br />DHTML<br />AJAX<br />Silverlight<br />WPF<br />Plug-in<br />Reach<br />
    5. 5. Silverlight 架构<br />Silverlight Runtime<br />纯Web<br />界面更美观<br />开发更高效<br />PresentationCore<br />DRM<br />XAML<br />Media<br />Core CLR<br />Small BCL<br />Debugging <br />Garbage Collector<br />Security<br />Exception<br />Loader <br />
    6. 6. Silverlight应用架构<br />逻辑分层<br />安全机制<br />界面模型<br />Browser<br />Web Server<br />Silverlight<br />B/L<br />B/L<br />Silverlight<br />B/L<br />网络访问<br />
    7. 7. 界面模型<br />如何与HTML页面结合?<br />三种选择<br />RIA 与 HTML<br />RIA 与 RIA<br />单体 RIA<br />模块粒度<br />松散耦合<br />本地通讯<br />MVC/MVP<br />
    8. 8. RIA与RIA- 本地访问<br />Silverlight与HTML对象:JavaScript接口<br />Silverlight应用之间:本地消息<br />Domain 1<br />Domain 2<br />本地消息接受者<br />Local Message Receiver<br />本地消息发送者<br />Local Message Sender<br />本地消息接受者<br />Local Message Receiver<br />本地消息发送者<br />Local Message Sender<br />
    9. 9. 单体RIA- 按需加载<br />Silverlight 应用<br />应用 Package (.xap)<br />In-Package 文件<br />应用程序集 (.dll)<br />Library 程序集<br />Library 程序集<br />Library 程序集<br />Entry Point<br />Application Class<br />Application Class<br />Application Class<br />Application Class<br />Application Class<br />Application Class<br />Application Class<br />Application Class<br />资源文件<br />资源文件<br />资源文件<br />资源文件<br />ExternalPart程序集<br />On-Demand 程序集<br />(缓存)<br />(延后)<br />
    10. 10. 界面模型 -控制流转<br />面向页面 vs. 面向GUI<br />页面<br />GUI<br /><ul><li>Silverlight 导航:相对于Application 的状态
    11. 11. Navigation Framework:Frame, Page</li></ul>&lt;HyperlinkButton<br />TargetName = &quot;MainContent“<br />NavigateUri = &quot;/Views/List/Products.xaml&quot;&gt;<br />&lt;/HyperlinkButton&gt;<br />
    12. 12. 逻辑分层<br />多层架构 VS. C/S 架构<br />Silverlight应用定位<br />逻辑写在何处?<br />与 ASP.NET MVC的关系?<br />
    13. 13. 逻辑分层 – 与ASP.NET MVC结合<br />SOAP<br />REST<br />ASP.NET MVC<br />业务逻辑层<br />仅传递用于显示的对象<br />以REST调用为主<br />与ASP.NET MVC 结合<br /> public class CategoryController : Controller{<br /> public ActionResult Products(int id){<br />return Json(prods);<br />// return View();<br />}<br />
    14. 14. 网络访问<br />Web Service<br />访问方式不同<br />资源/RESTvs. 调用/RPC<br />REST 具象状态传输<br />URI 资源的状态<br />Http 标准操作Get/Post<br />RPC 简单对象访问协议<br />SOAP<br />方法调用,复杂语义<br />Http-Based <br />Web Service<br />SOAP<br />REST<br />
    15. 15. 网络访问 - RPC/SOAP 方式<br />服务端处理<br />WCF 支持 SOAP<br />客户端调用 - Proxy<br />使用Visual Studio菜单工具<br />AddService Reference<br />命令行工具<br />SLsvcutil.exe<br />Silverlight 版本的 svcutil.exe<br />基于Channel Model开发<br />最灵活的方式<br />
    16. 16. 网络访问 - REST方式<br />服务端处理<br />WCF 支持 REST <br />[OperationContract]<br />[WebGet(UriTemplate =&quot;Northwind/Order/{orderId}&quot;)]<br />OrderInfoMsgGetOrderInfo(string orderId);<br />客户端调用<br />WebClient<br />数据处理<br />XML: XmlReader, Linq to XML, XmlSerializer<br />JSON: Linq to JSON, DataContractJsonSerializer<br />RSS/Atom Feeds: System.ServiceModel.Syndication<br />
    17. 17. 网络访问 - REST 与 SOAP 比较<br />
    18. 18. 安全机制<br />认证 ( Authentication )<br />授权 ( Authorization )<br />身份传递 ( Credential )<br />消息加密 ( Encryption )<br />
    19. 19. 安全机制 – 身份传递<br />身份信息如何传递给后台服务?<br />Browser-Based (自动)<br />Windows Authentication<br />ASP.NET Form Authentication/Cookies<br />Message-Based (手工)<br />URL 参数<br />消息头包含Username/Password 或Token<br />
    20. 20. Browser-Based Authentication<br /> Example with Cookies + Forms Auth<br />E.g.: ASP.NET loginUser:Password:<br />Credentials<br />YourDomain.com<br />Auth info (cookie)<br />Service calls + Auth info<br />Browser<br />
    21. 21. Browser-Based Authentication<br /> Login through Silverlight<br />YourDomain.com<br />Call with credentials toASP.NET Auth Service <br />User:Password:<br />ASP.NET Auth Service<br />Reply contains cookie<br />Service calls + Auth info<br />Browser<br />
    22. 22. Browser-Based Authentication<br /> Using Windows Authentication<br />Windows loginUser:Password:<br />YourDomain.com<br />Service calls + Creds<br />Browser<br />
    23. 23. Browser-Based Authentication: Cross-Domain Threat<br />MyBank.com LoginUser:Password:<br />Credentials<br />MyBank.com<br />Auth info (e.g. cookie)<br />Could steal orchange dataif protection wasn’t in place<br />恶意请求 + Auth info<br />恶意程序<br />恶意网站<br />
    24. 24. Message-Based Authentication<br />Identity managed by Silverlight, not the Browser<br />YourDomain.com<br />User:Password:<br />Creds are added by Silverlight, not browser<br />No creds<br />恶意网站<br />Browser<br />
    25. 25. Message-Based Authentication:<br />选择 1: 修改接口<br />[OperationContract]<br />public decimal GetActBal(intactID, string user, string pwd);<br />选择 2: 通过WCF 的 WS-Security 在SOAP包头中自动插入身份信息<br />&lt;basicHttpBinding&gt;<br /> &lt;binding name=&quot;myBinding&quot;&gt;<br />&lt;security mode=&quot;TransportWithMessageCredential&quot;&gt;<br />&lt;message clientCredentialType=&quot;UserName&quot;/&gt;<br /> &lt;/security&gt;<br />&lt;httpsTransport/&gt;<br /> &lt;/binding&gt;<br />&lt;/basicHttpBinding&gt;<br />
    26. 26. 安全机制 – 认证和授权<br />服务端如何认证和授权?<br />Message-Based 身份<br />if(!OperationContext.Current.ServiceSecurityContext.<br />PrimaryIdentity.IsAuthenticated)<br /> throw new SecurityException();<br />// 标准 WCF方法<br />Browser-Based 身份<br />if(!HttpContext.Current.User.Identity.IsAuthenticated)<br /> throw new SecurityException();<br />// ASP.NET Membership<br />
    27. 27. 安全机制 – 消息加密<br />完整,真实,防篡改<br />两种选择:传输层加密,消息层加密<br />
    28. 28. Silverlight 应用架构<br />界面模型<br />逻辑分层<br />网络访问<br />安全机制<br />
    29. 29. 百度应用<br />Silverlight版百度Hi<br />
    30. 30. 界面模型<br />选择单体RIA<br />源自Web版的风格<br />Silverlight 3.0暂时缺乏多窗口模型<br />单体RIA的问题<br />耦合度高,难以维护——来自Web版的经验<br />利用MVC分离来解决<br />
    31. 31. Code-Behind<br />ASPX/XAML<br />(View)<br />CS/VB<br />(Code-Behind)<br />从Win/Web Forms到MVC<br />&lt;Button OnClick=“…”&gt;<br /> …<br />&lt;/Button&gt;<br />private void<br />Button_OnClick(…)<br />{<br /> …<br />}<br />
    32. 32. 从Win/Web Forms到MVC<br />MVC<br />ASPX<br />(View)<br />CS/VB<br />(Controller)<br />&lt;form action=“…”&gt;<br /> …<br />&lt;/form&gt;<br />public ActionResult<br /> Search(…)<br />{<br />ViewData = …;<br /> return View();<br />}<br />ViewData<br />
    33. 33. Silverlight MVC实践<br />Binding<br />XAML<br />(View)<br />CS/VB<br />(Controller)<br />&lt;Button Click=“…”&gt;<br /> …<br />&lt;/Button&gt;<br />private void<br />Button_Click(…)<br />{<br /> …<br />Counter.Value++;<br />}<br />Binding<br />
    34. 34. Silverlight MVC实践<br />Builder<br />XAML<br />(View)<br />CS/VB<br />(Controller)<br />&lt;Button Click=“…”&gt;<br /> …<br />&lt;/Button&gt;<br />private void<br />Button_Click(…)<br />{<br />Counter.Value++;<br />builder.Update();<br />}<br />Builder<br />
    35. 35. 逻辑分层<br />统一调用百度IM API<br />隐藏后端逻辑<br />百度IM API<br />Silverlight版<br />百度Hi<br />网页版百度Hi<br />第三方客户端<br />(计划支持)<br />
    36. 36. 异步模型<br />调用单个异步函数<br />RetrieveUserAsync(username) .AddCallback(user =&gt; ProcessUser(user));<br />多个异步函数组成工作流<br />Async.Chain() .Next(context =&gt; FirstStep(context)) .Next(context =&gt; SecondStep(context)) .Next(context =&gt; ThirdStep(context)) .Go(initialContext);<br />
    37. 37. 网络访问<br />JSON-RPC<br />JSON易于被不同的客户端解释<br />JavaScript<br />Silverlight<br />IM接口更像是调用而非资源<br />
    38. 38. 安全机制<br />百度Passport<br />API式认证与授权<br />认证令牌<br />隐藏实现细节<br />在线会话(Session)<br />会话令牌<br />
    39. 39. 百度应用小结<br />MVC模型<br />Binding<br />Builder<br />API划分前后端<br />异步工作流<br />JSON-RPC<br />Passport + Session<br />
    40. 40. 参考资源<br />官方站点<br />http://www.silverlight.net/<br />免费空间<br />http://silverlight.live.com/<br />博客<br />http://wpfe.cnblogs.com/<br />http://dotnet.catchen.biz/<br />http://silverlightrocks.com/<br />
    41. 41. 疑问和解答<br />

    ×