【发布时间】:2011-02-06 03:34:43
【问题描述】:
我有一个简单的 Silverlight 应用程序托管在公司网络上。但是,我想允许少数选定的 NT 用户访问该网站并限制其余用户。我该如何配置它?
这样的配置也适用于浏览器之外的情况吗?
【问题讨论】:
标签: c# silverlight iis-6
我有一个简单的 Silverlight 应用程序托管在公司网络上。但是,我想允许少数选定的 NT 用户访问该网站并限制其余用户。我该如何配置它?
这样的配置也适用于浏览器之外的情况吗?
【问题讨论】:
标签: c# silverlight iis-6
您应该在 IIS 网站或虚拟目录配置中启用集成 Windows 身份验证。之后,您可以随时获取 User.Identity 和 User.Principal 对象并将它们转换为 WindowsIdentity 和 WindowsPrincipal 并检查当前用户是否处于某个角色(也就是 Windows 组中)或他/她的用户名...
关于开箱即用我不知道,因为我从未尝试过,但是一旦您的 SL 用户界面中有一个显示当前用户名的标签,您肯定可以对其进行测试,检查浏览器中的功能是否相同或退出浏览器。希望这会有所帮助...
【讨论】:
您可以做几件事。
1) 限制对正在调用的 Web 服务的访问 - Davide 的回答很好地涵盖了这一点。
2) 限制对存在 SL 应用程序的网站的访问,这很容易通过 ASP.NET 和通过 MembershipProvider 对 Windows 身份验证的内置支持来实现。这样,如果用户角色不正确,他们甚至无法加载托管 Silverlight 应用程序的 HTML 页面。这也将阻止他们将应用程序安装为 Out of Browser,因为他们一开始就无法访问它。
3) 在应用程序的 OOB 模式下(当 Application.Current.IsRunningOutOfBrowser 为真时),在启动时调用一个 Web 服务来验证用户是否处于正确的角色 - 如果他们不是,应用程序可以简单地显示一个“未授权”视觉效果,不显示真实的应用功能。
这样,如果用户曾经担任该角色并安装了应用程序 OOB,但随后失去了该权限,他们仍然无法使用该应用程序。
至于所有这些的实现,我建议查看 WCF RIA Services。它具有强大的身份验证/授权支持,可以简化实现这一点,即使您出于任何原因不想使用 RIA 服务进行数据访问(尽管我也建议这样做,它有助于隐藏 Silverlight 数据的许多异步复杂性访问)。
【讨论】: