Mamy kilka aplikacji, które muszą zrobić dokładnie to. Często nasze aplikacje są zablokowane w pliku web.config:
<authentication mode="Windows"/>
<authorization>
<allow roles="DOMAIN\GroupNameHere"/>
<deny users="?"/>
</authorization>
<location path="ApiControllerName">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Jednak trzeba jeszcze wyłączyć uwierzytelnianie systemu Windows API dla tego kontrolera. Można to zrobić poprzez edycję pliku applicationHost.config
na serwerze IIS i dodaje:
<location path="Default Web Site/ApplicationName/ApiControllerName">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<windowsAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</location>
Ten skrypt PowerShell zrobi to za ciebie:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
$applicationLocationPath = "Default Web Site/ApplicationName/ApiControllerName"
$oIIS = new-object Microsoft.Web.Administration.ServerManager
$oGlobalConfig = $oIIS.GetApplicationHostConfiguration()
$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/anonymousAuthentication", $applicationLocationPath)
$oSection.SetAttributeValue("enabled", "True")
$oSection = $oGlobalConfig.GetSection("system.webServer/security/authentication/windowsAuthentication", $applicationLocationPath)
$oSection.SetAttributeValue("enabled", "False")
$oIIS.CommitChanges()
„tylko był w stanie wykonać jedną lub drugą stronę” jak dokładnie to zrobiłeś? – bzlm
Jak dokładnie włączasz uwierzytelnianie systemu Windows? – gideon
Ustawienia IIS mają włączone uwierzytelnianie systemu Windows i umożliwiają także anonimowe. Web.config ma . Dodałem atrybut [Authorize] do kontrolera, którego potrzebowałem chronić, i zostawiłem go kontrolerowi, który chciałem ujawnić. –
Shawn