6

IIS 7.5 で powershell を使用して Windows 認証プロバイダーを追加/削除/並べ替える方法はありますか?

NTLM プロバイダーは、Windows Auth で使用した場合、Negotiate よりも高速であると言われましたが、逆の証拠は見つかりませんでした。これは、Silverlight 4、.NET 3.5、Windows 2003 Active Directory、および IIS6 と組み合わせて使用​​する場合と使用しない場合があります。

この声明を聞いて以来、IIS7.5 (Server 2008R2)、SilverLight 5、および .NET 4.5 にアップグレードしましたが、AD は 2003 機能レベルのままです。

私の目標は、NTLM プロバイダーが IIS 7.5 で有効なプロバイダーのリストの最初に表示されるようにすることです。

ありがとう

4

2 に答える 2

21

これは、powershell で行うことができます。私が取り組んでいたシナリオでは、既定の設定を変更するのではなく、特定のサイトを構成したいと考えていました。これは、すべての認証設定が overrideModeDefault="Deny" に設定されているため、デフォルトでは web.config では不可能です。これは、applicationhost.config に直接変更を加える必要があることを意味します。

私が探していたものの最終結果は次のとおりです。

<location path="MySite">
    <system.webServer>
        <security>
            <authentication>
                <anonymousAuthentication enabled="false" />
                <windowsAuthentication enabled="true">
                    <providers>
                        <clear />
                        <add value="NTLM" />
                        <add value="Negotiate" />
                    </providers>
                </windowsAuthentication>
            </authentication>
        </security>
    </system.webServer>
</location>

プロバイダーを追加する前にクリアを行うことで、優先順位が変更されます。

まず、匿名認証を無効にして Windows 認証を有効にするには、次を使用します。

Set-WebConfiguration system.webServer/security/authentication/anonymousAuthentication -PSPath IIS:\ -Location MySite -Value @{enabled="False"}
Set-WebConfiguration system.webServer/security/authentication/windowsAuthentication -PSPath IIS:\ -Location MySite -Value @{enabled="True"}

次に、<clear />タグを追加します。

Remove-WebConfigurationProperty -PSPath IIS:\ -Location MySite -filter system.webServer/security/authentication/windowsAuthentication/providers -name "."

最後に、プロバイダを順番に追加するには:

Add-WebConfiguration -Filter system.webServer/security/authentication/windowsAuthentication/providers -PSPath IIS:\ -Location MySite -Value NTLM
Add-WebConfiguration -Filter system.webServer/security/authentication/windowsAuthentication/providers -PSPath IIS:\ -Location MySite -Value Negotiate
于 2014-09-12T11:40:07.960 に答える
3

次のセクションで使用可能な認証方法のみを有効または無効にすることができます。

system.webServer/authentication

これは、system.webServer/authenticationがコレクションではなく、addおよびremoveconfig 要素をサポートしていないためです。次の場所にある IIS 構成スキーマ ファイルを参照してください。

C:\Windows\System32\inetsrv\config\schema\IIS_schema.xml

を検索するsystem.webServer/security/authenticationと、そのセクションの各子要素が明示的に定義されており、system.webServer/security/authenticationそれ自体の定義がないことがわかります。

順序に関しては、認証方法の順序を変更しようとしても違いはありません。たとえば、次の順序で (基本は Windows 認証の前):

<system.webServer>
    <security>
        <authentication>
            <basicAuthentication enabled="true" />
            <windowsAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

そして、注文を入れ替えると:

<system.webServer>
    <security>
        <authentication>
            <windowsAuthentication enabled="true" />
            <basicAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

...これにより、IIS は常に 401 チャレンジ (Fiddler を使用してキャプチャ) で次のヘッダーをブラウザーに送信します。

HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/7.5
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="172.16.3.87"

上記では、IIS はブラウザーに対して、Kerberos、NTLM、または基本認証方法をサポートしていることを示しています。これらの認証方法は、ブラウザーのベンダーに関係なく、既定では常にこの順序になっています (私は IE と Chrome を試しました)。

Fiddler を使用して観察したところ、IE と Chrome の両方が、そのブラウザーでサポートされている最初の使用可能な方法を使用してネゴシエーションを試みます。つまり、この場合、IE と Chrome の両方が Kerberos 認証をネゴシエートしました。

GET http://172.16.3.87:81/ HTTP/1.1
Host: 172.16.3.87:81
Connection: keep-alive
Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==

値を base64 でデコードすると、次のようにNegotiate表示されます。

NTLMSSP

次のようにして、Kerberos (ネゴシエート) メソッドを削除することができます。

<system.webServer>
    <security>
        <authentication>
            <windowsAuthentication enabled="true">
                <providers>
                    <remove value="Negotiate" />
                </providers>
            </windowsAuthentication>
            <basicAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

ただし、次のようにしてこれらの順序を変更しようとしても効果はありません。

<system.webServer>
    <security>
        <authentication>
            <windowsAuthentication enabled="true">
                <providers>
                    <remove value="Negotiate" />
                    <remove value="NTLM" />
                    <add value="NTLM" />
                    <add value="Negotiate" />
                </providers>
            </windowsAuthentication>
            <basicAuthentication enabled="true" />
        </authentication>
    </security>
</system.webServer>

WWW-Authenticate:次の順序でヘッダーが送信されます。

WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="172.16.3.87"
于 2013-08-24T16:14:54.577 に答える