2015-05-28 14 views
9

Ho un'applicazione Web scritta in ASP.NET MVC 4. Si tratta di un'applicazione intranet, pertanto sto utilizzando l'autenticazione di Windows (l'autenticazione anonima è disattivata). Espone alcuni servizi API Web ad altre applicazioni Web.

Il problema è che questi servizi devono essere accessibili da utenti anonimi da altre applicazioni. Quando chiamo il servizio dal browser tutto funziona bene (che è ovvio). Ma quando provo a comunicare con il servizio tramite un'altra applicazione restituisce un errore 401.2. La decorazione del controller API con attributo anonimo non aiuta. Ho provato anche in web.config per impostare l'elemento di posizione come nel seguente codice:Attributo AllowAnonymous non funzionante sul controller API Web

<location path="Controllers/Api"> 
<system.web> 
    <authorization> 
    <!-- All anonymous users access to the virtual path api --> 
    <allow users="?" /> 
    </authorization> 
</system.web> 
<!-- Need to include the security overrides else it will inherit from the root of the application --> 
<system.webServer> 
    <security> 
    <authentication> 
     <!-- Need to enable anonymous access and turn off Windows authentication for the virtual path --> 
     <anonymousAuthentication enabled="true"/> 
     <windowsAuthentication enabled="false"/> 
    </authentication> 
    </security> 
</system.webServer> 

Ma non aiuta neanche. In web.config non ho altre sezioni (voglio dire che non ho alcun blocco di autorizzazione).

Qualcuno ha idea di cosa sta succedendo? Perché non funziona? Sarei grato per qualsiasi informazione su come posso risolvere questo problema.

Questa è la mia azione API Web creato a scopo di test:

[AllowAnonymous] 
public class TestController : ApiController 
{ 
    public string GetSayHello() 
    { 
     return "Hello world"; 
    } 
} 


Saluti.

risposta

0

Verificare che le impostazioni IIS consentano effettivamente l'accesso anonimo. Deve avere una configurazione errata nel server. Un'alternativa è utilizzare Fiddler per il debug. Stai facendo tutto giusto dal punto di vista dell'applicazione.

4

Un mio collega ha scoperto che è necessario impostare il percorso della posizione con l'url effettivo.
Ad esempio, ho un controller denominato exampleController e lo si accede in questo modo http://domain.com/api/example/method. Quindi aggiungi l'esempio di seguito al tuo web.config. Visual Studio si lamenterà ma funziona.

<location path="api/example/method"> 
    <system.web> 
    <authorization> 
     <allow users="?" /> 
    </authorization> 
    </system.web> 
</location> 
Problemi correlati