用WAST来远程管理ASP.NET的user和role
相信大家在开发ASP.NET程序的时候都使用过ASP.NET Configuration这个菜单。点击这个菜单时,Visual Studio将会启动一个WebServer,进而有一个叫做ASP.NET Web Admin Tool的页面将会帮助你管理整个ASP.NET程序的user和role。比如新建用户,删除用户,新建角色,分配角色等等。有了这个Tool,我们可以非常方便的在开发时来管理membership和role。然而,当ASP.NET程序Publish到IIS上后,你是用什么来进行管理的呢?许多人会用开发自己的模块来进行管理,也有些人也会使用一些开源的模块来进行管理。然而功能性和稳定性都可能比.NET自带的管理工具(WAST)要差。我们知道在开发时通过Visual Studio使用WAST,但不知道怎样能直接使用这个模块。这篇随笔将和大家一起探讨怎样把这个强大的功能据为己有 :)
首先介绍一些基本的东东,如果你很熟悉了,那么请直接跳过吧。
当你安装.NET Framework时,在"C:\Windows\Microsoft.NET\Framework\v2.0.50727"目录下会自动创建一个名为ASP.NETWebAdminFiles的文件夹,里面就包含了一个Website,用来管理membership和role。当你使用VS时,VS会启动一个新的WebServer,在WebServer中来启动这个Website。同时请注意,访问这个Website时需要附加两个query string - applicationPhysicalPath(application的物理路径)以及applicationUrl(application在IIS中的目录),如:
而且,WAST在默认情况下是不允许进行远程访问的。如:http://serverIP/blabla
好了,在介绍了一些关于WAST的注意点后,我们就可以在我们自己的ASP.NET程序中来使用它了。以下主要介绍两种情形:
1) 在IIS server上进行membership和role管理。
2) 在外网中进行访问。
第一种情形其实不难,只需要简单的两步:
1) 为了使用WAST,我们可以将其publish在default站点的一个application中,application指向WAST的原目录或copy后的目录。然后为了只能通过本地访问,我们将其设置为windows集成验证(需要disable匿名验证)。同时请注意,为WAST指定的application pool的identity需要有读写application数据库文件的权限,比如App_Data目录下的database file。否则便会有access denied的错误了。
2) 将我们的ASP.NET程序也publish在default站点的另一个application中,并在某页面中增加一个访问WAST的link,link的URL就是我们刚才给出的示例。或者你也可以直接在IE中使用那个link来访问。
现在我们便可以在本地IIS上使用WAST了。但是你仍然不能通过 http://serverIP/blabla 来进行远程访问。以上仅仅是从admin的角度在IIS server上来维护自己的站点。如果你需要从外部来访问WAST,你需要修改它的源码,使得我们可以通过 http://serverIP/blabla 来访问(修改之前请做好备份:))。
第二种情形:
1) 打开WAST的web.config文件,删除impersonate以及authorization的定义,并将Windows验证修改为Forms验证,因为我们需要从外部来访问了。
2) 打开WAST的App_Code文件夹下WebAdminPage.cs文件,Ctrl+F搜索到if (!application.Context.Request.IsLocal),并将其改为if (false)。
3) 将WAST部署在IIS的一个application中,并设置其为Forms验证。同时仍然需要注意,为WAST指定的application pool的identity需要有读写application数据库文件的权限,比如App_Data目录下的database file。否则便会有access denied的错误了。
4) 在IIS的另一个application中部署ASP.NET 程序。
5) 现在最主要的问题就是WAST没有身份验证,任何匿名用户都可以通过 http://serverIP/blabla 来访问。在Forms验证的程序下,解决这个问题不难,大家可以自己去尝试。
6) 现在可以去测试下是不是OK了。
Have a nice day!