使用Windows身份验证在IIS 7.5上为ASHX处理程序启用PUT

时间:2011-07-14 15:15:46

标签: iis-7 iis-7.5 windows-authentication put

我有一个ASP.NET(.NET 4)网站,它使用http PUT作为.ashx通用处理程序。 PUT调用源自Silverlight前端。所有在我的本地计算机(Cassini Web服务器)上的VS 2010中工作。

然后我部署到IIS7.5 Win Server 2008 R2框。

silverlight / website很好,但是对.ashx处理程序的PUT调用会遇到Windows登录提示。
这是一个本地Intranet,因此Windows身份验证(使用NTLM和协商提供程序)是唯一启用的身份验证。

然后我读到了这个:http://blogs.msdn.com/b/joseph_fultz/archive/2009/07/23/enabling-the-put-verb-with-handlers-and-iis-7-0.aspx

我已经按照他的建议,我现在可以通过我的.ashx处理程序进行PUT调用。问题是只有Web服务器的Administrators组中的人才能执行此操作。没人能。他们遇到了Windows登录提示。

知道这可能是什么吗?

我无法向公司中的每个人提供网络服务器的管理员权限。毫无疑问,他们会切断我的一只手,在我面前吃手,然后告诉我门。

1 个答案:

答案 0 :(得分:10)

好的我明白了。

以下是IIS 7.5中的关键配置元素:

  1. 在Windows身份验证/提供程序下 - NTLM必须位于Negotiate
  2. 之上
  3. 域用户需要对包含ashx处理程序的目录的写访问权限
  4. 未在Web服务器上启用URL授权作为角色。我添加了它,然后将其粘贴在system.webServer:

    下的web.config中
    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" users="*" verbs="GET,HEAD,POST,PUT,DELETE,DEBUG" />
        </authorization>
    </security>
    
  5. (我会稍微减少一点,但现在它有效)

    我的整个system.webServer元素如下:

    <system.webServer>
        <modules>
            <remove name="WebDAVModule" />
        </modules>
        <defaultDocument>
            <files>
                <clear />
                <add value="default.aspx" />
            </files>
        </defaultDocument>
        <handlers accessPolicy="Read, Write, Execute, Script">
            <remove name="WebDAV" />
            <remove name="SimpleHandlerFactory-Integrated-4.0" />
            <remove name="SimpleHandlerFactory-Integrated" />
            <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Write" preCondition="integratedMode" />
            <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG,PUT" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Write" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
        <security>
            <authorization>
                <remove users="*" roles="" verbs="" />
                <add accessType="Allow" users="*" verbs="GET,HEAD,POST,PUT,DELETE,DEBUG" />
            </authorization>
        </security>
    
    </system.webServer>
    

    那就做到了。