我可以在同一服务器上托管的现有第三方应用程序上重用我的ASP.Net身份验证吗?

时间:2013-02-20 15:37:56

标签: asp.net silverlight iis

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

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

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

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

但现在我只是“无法验证数据。”从表单标记中删除域后,身份验证现在正在运行。我只需要将其从服务调用中删除,我将全部设置(是的,它确实向全世界开放了服务,或者至少是所有可以访问内部网的人)。

2 个答案:

答案 0 :(得分: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框架相似,你应该尝试将基于silverlight的应用程序设置为ASP下的子应用程序。 NET应用程序。表单身份验证设置应该以这种方式继承..

答案 1 :(得分:0)

Silverlight需要托管在一个html文件中(基于浏览器) - 好吧它把它放在一个位置,但你可以使用重定向到那个位置,它只能通过经过身份验证的表单访问页。

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