Friends, Technology, Web2.0 - What I am reading

    [Home] [Recent] [Site Map]

   

对SPS 2003 URL进行访问授权控制

对于普通ASP.NET站点来说,要对该站点的URL进行访问授权控制,可以通过创建一个HttpModule来监控每个Request,如果Request Url为受控URL(即要访问该URL地址需要经过一种特定验证授权)时,则跳转到验证授权页面进行身份验证授权,完成后再返回即可正常访问Request Url。我想,这个实现并不难,网络上也可以找到诸多用HttpHandler和HttpModule来做这块处理的示例。

那么,SharePoint Portal Server 2003中,访问受控URL和普通ASP.NET站点有何不同吗?带着这个疑问,我们可以一开始也用HttpModule来做尝试。假设此时我们访问一个SharePoint 文档库的某个内容,其URL地址应该是 http://localhost/DocLib1/Test.doc,而在我们的受控URL数据库记录中发现 http://localhost/DocLib1 为受控URL,那么要访问 http://localhost/DocLib1/Test.doc,就不能让未经过验证授权的用户直接访问,而应该跳转到我们验证授权页面进行身份验证授权后方能访问。结果很让人遗憾,我们的访问畅通无阻。于是做了调试跟踪,发现在 HttpModule 中 Request.Url 不是我们想要的 http://localhost/DocLib1/Test.doc,而是一个对我们未知的 http://localhost/_vti_bin/owssvr.dll,正因为这个地址不是受控URL,所以HttpModule不做处理直接让用户继续访问了。

姑且不论owssvr.dll到底为何物,现在要解决的关键问题有两个:

  1. 为什么我们点的是 http://localhost/DocLib1/Test.doc 这个请求,而到HttpModule时,却变成了http://localhost/_vti_bin/owssvr.dll,谁干的好事?
  2. 我们能否在这家伙做这件事之前把执行权抢过来做我们自己的处理?

对于第一个问题:谁动了我的URL?在了解这个问题答案之前可以先参考以下文章:

看完上面两篇文章,或许你已经清晰知道是谁动了我们的URL。是stsfltr.dll(可以在IIS管理器-->Web站点属性窗口-->ISAPI 筛选器找到)这个ISAPI Filter在HttpModule之前抢先做了处理

第一个问题找到了,第二个问题:怎么解决这个问题,把执行权抢过来?只能自己再写个 ISAPI Filter,并把该 ISAPI Filter排在stsfltr.dll之前了。于是,我们创建了一个C++ Win32 项目,定义了下面这个一个ISAPI Filter class:

class CRedirectorFilter : public CHttpFilter

{

public:

     CRedirectorFilter();

     ~CRedirectorFilter();

 

     BOOL IsSecureDocument(LPCTSTR docUrl, LPCTSTR agent, LPCTSTR cookie);

     BOOL GetCookie(CHttpFilterContext* pCtxt,CString strName, CString & strValue);

     BOOL GetAgent(CHttpFilterContext* pCtxt,CString strName, CString & strValue);

 

// Overrides

     // ClassWizard generated virtual function overrides

         // NOTE - the ClassWizard will add and remove member functions here.

         //    DO NOT EDIT what you see in these blocks of generated code !

     //{{AFX_VIRTUAL(CRedirectorFilter)

     public:

     virtual BOOL GetFilterVersion(PHTTP_FILTER_VERSION pVer);

     virtual DWORD OnPreprocHeaders(CHttpFilterContext* pCtxt, PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo);

     virtual DWORD OnEndOfNetSession(CHttpFilterContext* pCtxt);

     //}}AFX_VIRTUAL

 

     //{{AFX_MSG(CRedirectorFilter)

     //}}AFX_MSG

};

通过OnPreprocHeaders来处理判断我们的受控 URL 逻辑,如果是受控URL且尚未经过验证,则绕过stsfltr.dll直接跳转到验证授权页面进行身份验证授权;如果不是受控URL或已经经过验证,则直接交给IIS继续处理。

对于MOSS 2007,没有了stsfiltr.dll的困扰,实现类似方案就相对方便许多了,有兴趣者可以利用HttpHandler或HttpModule进行类似实现。

BTW:对于对受控URL的判断逻辑,如果感觉C++实现比较吃力费时,可以考虑用.NET Assembly来写这块逻辑,然后利用C++调用托管DLL来实现这块逻辑。具体可以参考KB:


>>Source Link
>>Blog: joycode
>>Publish Date: 3/28/2007 8:00:41 AM
>>Keywords: url httpmodule

Related Posts
>>技巧/诀窍:在ASP.NET中重写URL #
    【原文地址】Tip/Trick: Url Rewriting with ASP.NET 【原文发表日期】 Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动态地“重写”URL,以在他们的ASP.NETweb应用中发布比较干净的URL端点。这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的
>>也说UrlRewriter #
    UrlRewriter是我们现在做博客系统基本上必用的功能,除了对搜索引擎友好外,人也比较容易记,看着也舒服。关于UrlRewriter的文章其实也是非常多,由于有网友提出想了解肥猫博客使用的UrlRewriter技术,因此这里主要针对在肥猫博客中使用的UrlRewriter技术做一个介绍。这个实现主要是针对ASP.NET 1.1体系的,可能你要说ASP.NET 2.0都出来了,还要谈1.1,可是
>>Calender.php: 给网站应用加上日历归档/导航 #
    前2天尝试awstats的按天归档机制,发现忽然需要给统计报表应用做一个日历,每天链接到报表的URL。在网上搜了几套PHP的日历库:发现PHP Calendar是一个最方便的可扩展PHP类包,我需要的2个功能都非常容易方便的定制功能都有了: 1 按月/按年的日历展示; 2 可以定制日期链接到指定的URL地址; 一个简单的月历输出样例在这里: include...
>>新浪博客仅仅开放个性化域名就行吗? #
    新浪博客向所有用户开放个性化域名算是blog圈迎接315最重大的新闻了。新浪认为此举意义重大: 新浪网自2005年推出博客服务以来,强力推动了博客平民化,引发了持续至今的“全民博客写作”狂潮,新浪博客注册用户已达数千万。此次推出的博客域名自定义功能将惠及数千万博友。新浪博客随后将陆续推出更加人性化、功能更为稳定齐全的其它功能。 loverty认为这是将最基本的功能变成了营销炒作的素
>>PPC Wish Lists, Part 3 #
    Kevin Lee wraps up his PPC advertisers" wishlist for search engines in his ClickZ column today. Included in the final installment are a way to bid-boost Google"s ads that appear on AOL, more click-spe
>>Anothr Me上线 #
    提供Skype订阅RSS服务的Anothr.com,近日推出了Anothr me,目前还只有英文版,看来这和Anothr的用户群主要来自英文世界有关。 所谓的Anothr me,就是再Web上管理自己用Skype订阅的RSS。 对于使用者来说,可以用浏览器的书签,或者订阅叶面,直接在web上订阅并设定。 对于Blogger呢,则可以在自己的Blog中,加上订阅的脚本,方便你的读者通过sKYPE订阅
>>Office SharePoint Server 2007 搜索模块的两个“大”问题 #
    OK,这篇blog算是来给Office SharePoint Server 2007 “揭丑”了,确切来说,是给Office SharePoint Server 2007中的搜索功能模块“揭丑”。其实,这里要说的两个问题很早就已经暴露出来了,但是为啥直到现在才进行“揭丑”行动呢?因为直到现在,我才能确定这两个问题已经有解决之道(或者有望解决),呵呵,否则,仅仅说问题,而不说怎么解决,您不是会更郁闷
>>Super Bowl Ads – Where’s the URL? #
    According to Reuters, a fair sample of this year’s Super Bowl television advertisements actually caused fear or anxiety on the part of some test subjects at the University of California. This makes s
>>视频:OpenID是如何工作的? #
    推荐: Pageflakes(飞鸽)中文版已发布,赶快来创建自已的个性化首页。 前段时间微软和AOL表示他们将会支持OpenID,紧接着Digg的创始人Kevin Rose也在”2007-Web程序的未来会议(Future Of Web Apps 2007)”上公开表示,Digg也将会采用OpenID作为身份认证系统。由于这些大型网站的公开表示,一下子让Ope
>> 一个2000年的难题(续) #
    关于《一个2000年的难题》我当时的做法不像Erning那样隐蔽,不过思路是一样的。就是 <img src="http://msweb/img/logo.jpg" onload="this.location="/page4everyone.htm"" width=1 height=1< http://msweb/img/logo.jpg 是内部网络的一幅图片, /page4ever

Other Posts:
>>暂时广告贴:OTEC广州三月份线下聚会
>>ASP.NET AJAX (Atlas) 拖放(Drag & Drop)功能6种实现方法总结
>>JetBrains向MVP免费提供Resharper
>>【非技术】西雅图之行
>>WatiR or WatiN
>>附和一下 demonfox 同学,说说symbian & s60
>>说说
>>$150等于什么?
>>Policy Injection Application Block
>>Gmail的小Bug
>>在MOSS中直接嵌入ASP.NET Page
>>2007 MVP Summit, MS Campus Day


Month Archives:

Top Tags:
Technology Internet Google Company & Product Profiles Search feature column letter analysis Search Headlines comment Startups WebApp咨询 业界信息 业界动态 BigCos Google/SEO 互联网络 国际政治 news 抓虾动态 Search Types: Local 播客指南 application Yahoo 搜索引擎 Gadgets/Hack widget 用户体验 Yahoo: Search Ads SEO


@2007 All rights Reserved