0

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

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

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

<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");
    }    
}

但现在我只是得到“无法验证数据”。从表单标签中删除域后,身份验证现在正在工作。我只需要将它从服务调用中删除,我就准备好了(是的,这确实向全世界开放了服务,或者至少向可以访问 Intranet 的每个人开放)。

4

2 回答 2

1

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

如何使用 ASP.NET 保护对 SWF 文件的访问?

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

您的 silverlight 应用程序是否也调用您托管的 Web 服务?您可能还想确保这些都是安全的。

编辑:我还刚刚注意到您将它们设置为两个单独的应用程序 - 如果 .NET 框架在两者之间相似,您应该尝试将基于 silverlight 的应用程序设置为 ASP.NET 应用程序下的子应用程序。表单身份验证设置应该以这种方式继承..

于 2013-02-20T16:18:58.457 回答
0

Silverlight 需要托管在 html 文件(基于浏览器)中 - 好的,它会将其放置在某个位置,但您可以使用重定向到该位置,它只能由经过表单身份验证的页面访问。

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

于 2013-02-20T21:12:54.763 回答