2013-02-20 25 views
0

我们有一个托管在IIS中的第三方数据可视化工具(用Silverlight编写),并且根本不提供任何安全性或身份验证(即如果您有权访问服务器并知道URL可以查看所有数据使用ODBC连接中的凭据公开)。我们已经构建了另一个应用程序,它基于登录用户提供适当的身份验证和访问限制。我们目前的“安全”第三方应用程序的解决方案是检查用户是否从我们的应用程序访问它。看来我们正在通过Referer头部来检查URL。我可以在同一台服务器上托管的现有第三方应用程序上重复使用我的ASP.Net身份验证吗?

我想知道是否可以将模块添加到使用我们现有的身份验证和权限来控制对第三方应用程序的访问的管道中(我们当前正在使用会话和表单身份验证的混合,但可能会重写权利要求书)。这听起来像应该起作用,但是没有人有尝试过这种事情的经验吗?陷阱?全能的坏主意?

更新:我已经确认与供应商,它只是一个ASP.Net应用程序与几页作为入口点,所以我应该能够添加表单身份验证。我试图让它使用共享窗体cookie,但到目前为止没有运气。我有这个在每个web.config中对我们的网站(本地主机/ MainApp)和供应商站点(本地主机/供应商):

<authentication mode="Forms"> 
    <forms name=".ASPXFORMSAUTH" loginUrl="Login.aspx" protection="All" timeout="20" path="/" /> 
</authentication> 
<machineKey 
    validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" 
    decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" 
    validation="SHA1"/> 

为了记录在案,这些都是我将使用的键在生产中,而是取自MSDN示例。

我已经更新了供应商的Global.asax文件(我们已经做了,在我们的安装程序)补充:

protected void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args) 
{ 
    System.Diagnostics.Debug.WriteLine("FormsAuthentication_OnAuthenticate"); 
    if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
    { 
     System.Diagnostics.Debugger.Break(); 
     try 
     { 
      FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value); 
      args.User = new System.Security.Principal.GenericPrincipal(new FormsIdentity(ticket), new string[0]); 

      if (!args.User.Identity.IsAuthenticated) 
      { 
       Context.Response.Redirect("~/Error.htm"); 
      } 
     } 
     catch (Exception e) 
     { 
      Context.Response.Redirect("~/Error.htm?" + e.Message); 
      // Decrypt method failed. 
     } 
    } 
    else 
    { 
     Context.Response.Redirect("~/Error.htm?CookieNotFound"); 
    }  
} 

,但现在我正准备。“无法验证数据” 从窗体标签中删除域后,认证现在正在工作。我只需要将它从服务电话中删除,我就会全部设置好(是的,它确实向全世界开放了服务,至少每个人都可以访问内部网)。

回答

1

因此你有一个.xap文件?你想用表单认证来保护它,这是否正确?我建议在IIS中为.xap扩展添加处理程序映射并将其映射到ASP.NET。您可以更进一步,创建一个中间页面或处理程序,实际上可以对.xap文件进行流式处理。这样 - 它将受到表单身份验证的保护。这里有一些讨论(他们使用Flash SWF文件,但概念是相同的):

How to secure access to SWF file using ASP.NET?

http://www.justskins.com/forums/file-types-not-protected-157682.html

这是否也承载您的Silverlight应用程序调用Web服务?你可能想要确保这些也是安全的。

编辑:我也只是注意到你有他们设置为两个单独的应用程序 - 如果.NET框架是相似的2之间,你应该尝试设置你的基于Silverlight的应用程序作为一个子应用程序在你的ASP .NET应用程序。表单身份验证设置应该继承这种方式..

+0

如果只是这么简单。这是一个购买的应用程序,它似乎是一个完整的提供SilverLight应用程序的ASP.Net应用程序。我需要保护整个应用程序,并且安装程序将其放置在我们无法控制或更改的固定位置。 – 2013-02-20 19:02:15

+0

您无法设置新的(子)Web应用程序并将其指向相同的物理路径?您可以将它设置为与原始应用程序池运行在同一个应用程序池中,我打赌,稍微调整一下即可启用它。 – mikey 2013-02-20 19:10:02

+0

没有想到:)我会试试看看会发生什么。 – 2013-02-20 19:18:44

0

Silverlight需要托管在一个HTML文件(基于浏览器) - 确定它把它放在一个位置,但你可以使用重定向到该位置,这它只能通过表单认证页面访问。

您可以将登录cookie的要求添加到服务于Silverlight应用程序的html/aspx页面。

相关问题