【问题标题】:Silverlight Security ContextSilverlight 安全上下文
【发布时间】:2011-08-18 00:42:07
【问题描述】:

我想知道 Silverlight 是否有一个安全上下文,您可以在其中使用[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] 标记部分代码。

从我目前收集的所有研究来看,为了获得“用户对象”,您必须编写服务(或使用他们想要使我们的生活复杂化的讨厌的 RIA 废话)并来回传递xaml (silverlight) 运行时和 wcf 服务均可识别的自定义用户对象(继承自 UserBase 对象)。

假设这是正确的,我如何限制对 silverlight 应用程序中特定屏幕的访问?

如何将当前的安全主体设置为与服务返回的用户实例相同?

我不想重新发明轮子,我希望我可以在 Silverlight 代码中使用 ASP.NET/Windows 中的授权技术,方法是使用 PrincipalPermission 属性或 silverlight 等效属性装饰屏幕。

任何帮助将不胜感激! 谢谢,

马丁

【问题讨论】:

    标签: silverlight security silverlight-4.0 asp.net-membership domainservices


    【解决方案1】:

    我不确定我是否理解 PrincipalPermission 的内容会如何帮助您。

    您的应用必须允许用户导航到他们无权访问的屏幕,然后它才会发挥作用。设计您的应用程序以便用户只能导航到他们有权访问的功能会更有意义。

    考虑一下,不要保护“屏幕”,而是尝试保护“屏幕”上显示的数据(您可以在服务器端这样做)。

    顺便说一句,答案是否定的 Silverlight 不支持安全主体的概念。

    【讨论】:

    • 好吧,授权的概念是通过 IPrincipal 接口在 Windows (WPF/Forms)、ASP.NET 或 Silverlight 上应用的。显然,Silverlight 4 rtm 生成了 WebContext 对象,该对象继承自 System.ServiceModel.DomainServices.Client.ApplicationServices.WebContext.WebContextBase' and has: public IPrincipal User, public AuthenticationService Authentication` public static WebContextBase Current 所以关于这一点,我理论上可以使用 PrincipalPermissionAttribute 来限制屏幕,因为每个屏幕是每个屏幕的构造函数中的 uri。
    • @bleepzier:理论上,你有没有在实践中尝试过。如何使用 Silverlight 中不存在的 PrincipalPermission?如果您在 Silverlight 应用程序中使用 UriMapping,则创建一个自定义映射器并在其中包含您的 IPrinciple 检查代码。
    【解决方案2】:

    只要应用程序在 System.ServiceModel.DomainServices.Client.ApplicationServices.WebContext.WebContextBase 命名空间(来自 WCF RIA sdk)中实现 WebContextBase 对象,安全上下文就应该是有效的。 WebContextBase 实现了 IPrincipal 接口,这反过来使 [PrincipalPermission(SecurityAction.Demand, Role = "Administrator")] 属性在整个代码中的使用成为可能。

    为了完成这项工作,需要在解决方案的 Web 项目中添加一个 AuthorizationDomainService,并实现默认或自定义的成员资格和角色提供程序。

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2015-09-13
      • 2019-05-29
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      相关资源
      最近更新 更多