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

发布于 2024-11-24 05:17:30 字数 774 浏览 0 评论 0原文

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

然后我部署到 IIS7.5 Win Server 2008 R2 机器上。

silverlight/网站很好,但是对 .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< /a>

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

知道这可能是什么吗?

我无法向公司中的每个人授予网络服务器的管理员权限。毫无疑问,他们会砍掉我的一只手,当着我的面吃掉那只手,然后带我出去。

I have an ASP.NET (.NET 4) website that uses http PUT for an .ashx generic handler. The PUT call originates from a Silverlight front end. All works in VS 2010 on my local machine (Cassini web server).

Then I deployed to an IIS7.5 Win Server 2008 R2 box.

The silverlight/website is fine, but PUT calls to the .ashx handler are met with a Windows Login Prompt.
This is a local intranet so Windows Authentication (with NTLM & Negotiate providers) is the only enabled authentication.

Then I read this: http://blogs.msdn.com/b/joseph_fultz/archive/2009/07/23/enabling-the-put-verb-with-handlers-and-iis-7-0.aspx

I've followed his suggestion and I can now make PUT calls via my .ashx handler. Problem is only folks in the Administrators Group of the web server can do this. No one else can. They are met with the windows login prompt.

Any idea what this could be?

I can't give Everyone in the company Admin privileges on the webserver. They would no doubt cut off one of my hands, eat said hand in front of me, and then show me the door.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

嘿看小鸭子会跑 2024-12-01 05:17:30

好吧,我想通了。

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

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

    <前><代码><安全>
    <授权>
    <删除用户=“*”角色=“”动词=“”/>
    />;


我会稍微修剪一下,但现在它可以工作)

我的整个 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>

就这样。

Ok I figured it out.

Here are the key configuration elements in IIS 7.5:

  1. Under Windows Authentication / Providers - NTLM had to be on top of Negotiate
  2. Domain Users needed write access to the directory containing the ashx handler
  3. URL Authorization was not enabled as a role on the web server. I added it and then stuck this in the web.config under system.webServer:

    <security>
        <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" users="*" verbs="GET,HEAD,POST,PUT,DELETE,DEBUG" />
        </authorization>
    </security>
    

(I'll trim that down a bit, but for now it works)

My entire system.webServer element is as follows:

<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>

That did it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文