5

Possiedo un'applicazione ASP.NET esistente che implementa l'autenticazione basata su moduli in tutto il sito. L'applicazione viene distribuita in più istanze (ad es. Cliente1, cliente2, test, dev, ecc.), Con un database separato per istanza. SSL è in gioco. La configurazione dell'istanza avviene tramite un file di configurazione XML.Servizio Web ASP.NET all'interno dell'applicazione di autenticazione moduli

Ho un nuovo requisito per consentire l'upload/download di determinati dati, che vorrei implementare come servizio web pubblico.

Inizialmente, il mio pensiero era di disabilitare selettivamente l'autenticazione dei moduli per una sottodirectory dell'applicazione (ad esempio, ~/Servizi), e quindi effettuare l'autenticazione tramite un'intestazione SOAP o simile.

Tuttavia, non sto trovando un modo per disabilitare selettivamente auth.

Domanda: C'è un modo per farlo? Ho provato il tag > di posizione > nella configurazione web senza alcun risultato.

In caso negativo, quali sono i tuoi consigli su come configurarlo? Posso pensare alle seguenti opzioni:

1) Creare un nuovo progetto "Servizi" nella mia soluzione, quindi configurare un'applicazione ASP.NET IIS separata su quella directory in ogni istanza. (Pro: facile accesso alla configurazione dell'istanza, che potrebbe essere necessaria in futuro Con: carico di configurazione per ogni istanza rilevante).

2) Creare una soluzione "Servizi" separata che faccia riferimento agli assembly necessari dalla soluzione di applicazione e ospitarla come applicazione ASP.NET separata. Quindi, cercare la stringa di connessione db in base allo UserName fornito in SOAP Header. (Pro: singola app da configurare in IIS. Con: Nessun accesso facile alla configurazione di istanza.)

3) ??

Chiarimento: ho visto la risposta qui: Override ASP.NET forms authentication for a single page, ma l'uso di un tag di posizione non aiuta (le richieste per il servizio Web sono ancora reindirizzate). Le sezioni pertinenti nel mio web.config simile a questa:

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx"/> 
    </authentication> 
    <authorization> 
    <deny users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 

<location path="~/Services/MyService.asmx"> 
    <system.web> 
    <authentication mode="None" /> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 
+3

Ogni volta che ho usato ogni tag posizione in una web.config il percorso è stato nella forma di "Servizi/MyService.asmx" non "~/Servizi/MyService.asmx" Hai provato specificando senza il tilde-slash? –

+0

Era così. Potrei giurare di aver provato 3 diverse versioni di questo. Questa volta ho chiuso il browser e la tua soluzione ha funzionato perfettamente. – dividius

risposta

4

penserei il tag posizione avrebbe funzionato, in cui si specifica la cartella di servizi e consentire a tutti gli utenti, qualcosa di simile:

<location path="services"> 
     <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     </system.web> 
</location> 

Ma hai detto che non funzionava, hai provato a mettere un file web.config nella cartella servizi e disabilitare l'autenticazione dei moduli e consentire a tutti gli utenti di quel file?

+0

Come indicato sopra, l'errore che ho fatto è stato nel specificare "~ \ Services" per il percorso, invece di "Servizi" – dividius

+0

Contento che funzioni, peccato che asp.net non sia coerente in dove è possibile utilizzare il ~/mi ha catturato in un paio di occasioni –

0

Si potrebbe anche avere un file web.config (sovrascrivente) nella cartella servizi con il controllo di accesso impostato su anonimo.

0

ciò che ha funzionato per me era consentire agli utenti di accedere a tutti gli utenti nella cartella in cui si trovano i miei servizi web. In primo luogo ho aggiunto un file di configurazione in quella cartella e inserito il codice qui sotto per consentire a tutti gli utenti.

<authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
Problemi correlati