Domanda

Ho un sito ASP.NET MVC bloccato tramite Forms Authentication. Web.config ha

<authentication mode="Forms">
    <forms defaultUrl="~/Account/LogOn" loginUrl="~/Account/LogOn" timeout="2880"/>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

Nessuna delle mie pagine diverse da Account / LogOn può essere visualizzata a meno che l'utente non sia autenticato.

Ora sto cercando di aggiungere PayPal IPN al mio sito e per farlo ho bisogno di due pagine che gestiscano la conferma di pagamento di PayPal e la pagina di ringraziamento. Queste due pagine devono essere disponibili per utenti anonimi.

Vorrei che queste pagine fossero azioni del controller dal mio Account Controller. Esiste un modo per applicare un attributo a metodi di azione specifici che li rendono disponibili agli utenti anonimi? Ho trovato qui diversi post che tentano di farlo, ma c'era molta gente che voleva lo scenario opposto.

Fondamentalmente voglio che la classe AccountController non abbia alcuna autorizzazione per la maggior parte dei metodi, tranne alcuni. Al momento sembra che solo il metodo LogOn sia disponibile per utenti anonimi.

È stato utile?

Soluzione

Sì, puoi. Nel tuo AccountController c'è un attributo [Autorizza] a livello di classe (per limitare l'intero controller) o su metodi specifici.

Per limitare le azioni specifiche, è sufficiente utilizzare l'attributo Autorizza sui metodi che gestiscono tali azioni e lasciare la classe controller libera.

Ecco alcuni esempi ... spero che sia d'aiuto

Per richiedere agli utenti di accedere, utilizzare:

[Authorize]
public class SomeController : Controller

// Or
[Authorize]
public ActionResult SomeAction()

Per limitare l'accesso per ruoli specifici, utilizzare:

[Authorize(Roles = "Admin, User")]
public class SomeController : Controller

// Or
[Authorize(Roles = "Admin, User")]
public ActionResult SomeAction()

E per limitare l'accesso per utenti specifici, utilizzare:

[Authorize(Users = "Charles, Linus")]
public class SomeController : Controller

// Or
[Authorize(Users = "Charles, Linus")]
public ActionResult SomeAction()

Come puoi vedere, puoi utilizzare l'attributo a livello di classe o a livello di metodo. La tua scelta!

Altri suggerimenti

Non credo ci sia un " Non autorizzato " attributo che può essere applicato alle azioni e se non si desidera posizionare " [Autorizza] " su tutte le azioni tranne due in un controller provare quanto segue:

Ecco due metodi che mi vengono in mente:

1- Attributo posizione in Web.config (Non sono sicuro se funzionerà con il routing MVC ecc.)

Dopo il tuo

<system.web> stuff </system.web>

nel file web.config, aggiungere quanto segue:

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

Dove Account / ActionOne è il nome del metodo di azione a cui si desidera dare accesso anonimo. Per la seconda azione, copia il codice sopra e incollalo subito dopo e cambia il nome dell'azione.

Non sono sicuro che funzionerà a causa del routing MVC ecc., ma provalo.

2- Controller di base

Se la soluzione precedente non funzionasse, la soluzione migliore sarebbe quella di creare un controller di base decorato con l'attributo Autorizza:

[Authorize]
public class AuthorizeControllerBase : Controller {}

Quindi fai in modo che tutti i tuoi controller ereditino da esso:

public class AccountController : AuthorizeControllerBase
{
      // your actions etc.
}

Ciò richiederà a qualsiasi controller che eredita da AuthorizeControllerBase di richiedere l'autorizzazione / accesso per richiamare qualsiasi metodo.

Quindi dovrai rimuovere dal tuo web.config

Invece di proteggere tutte le risorse sul tuo sito Web per impostazione predefinita e quindi cercare un modo per fornire accesso anonimo per le singole risorse, probabilmente stai meglio adottando l'approccio opposto. Non specificare le regole di autorizzazione nel tuo web.config, quindi usa i filtri di autorizzazione (vedi la risposta di Mickel) per proteggere i singoli controller e / o azioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top