6

.ashx汎用ハンドラーにhttpPUTを使用するASP.NET(.NET 4)Webサイトがあります。PUT呼び出しは、Silverlightフロントエンドから発信されます。すべてが私のローカルマシン(Cassini Webサーバー)上のVS2010で動作します。

次に、IIS7.5 Win Server2008R2ボックスに展開しました。

Silverlight / Webサイトは問題ありませんが、.ashxハンドラーへのPUT呼び出しは、Windowsログインプロンプトで処理されます。
これはローカルイントラネットであるため、有効な認証は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のログインプロンプトが表示されます。

これが何であるかについて何か考えはありますか?

会社の全員にWebサーバーの管理者権限を与えることはできません。彼らは間違いなく私の片方の手を切り落とし、私の前でその手を食べて、それから私にドアを見せてくれたでしょう。

4

1 に答える 1

9

わかりました。

IIS 7.5 の主な構成要素は次のとおりです。

  1. Windows認証/プロバイダーの下で-NTLMはネゴシエートの上になければなりませんでした
  2. ドメイン ユーザーには、ashx ハンドラーを含むディレクトリへの書き込みアクセスが必要でした
  3. 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>
    

(少し減らしますが、今のところ機能しています)

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

それでできました。

于 2011-07-19T12:31:25.737 に答える