2015-11-26 6 views
12

Sto scrivendo la prima applicazione API Web ASP.NET. Conosco altri framework per applicazioni web (principalmente Symfony, ma anche Django e, in misura minore, RoR).Recupero e stato permanente tra richieste

Sto faticando un po ', per capire la sequenza di eventi che si verificano dopo che una richiesta viene inviata da un browser/front-end client, al server web.

Sto scrivendo un'applicazione multi-tenant, che utilizza un back-end DB. Sto usando ADO e SQL raw per accedere al database, ho anche bisogno di memorizzare un sacco di informazioni, per utente, in modo tale che, in sostanza, creo (o recuperi dalla cache), un contesto precaricato, per l'utente.

Ecco uno pseudo-codice, che illustra, cosa sto cercando di ottenere, in ASP.NET.

namespace myApp.Controllers 
{ 
    public class FoobarController : ApiController 
    { 
     public Response doLogin(request) 
     { 
      var ctx = myApplicationContext.getInstance(); 
      var user = ctx.getUser();  

      if (!user.isLoggedOn()) 
      { 
       username = request.getParameter('username'); 
       password= request.getParameter('password'); 

       dbManager = ctx.getDbInstance(); 

       resp = dbManager.internalLogin(username, password); 

       // Load permissions etc for current user, from db 
       // Store user info in cache .. 
      } 
     }  

     public Response ActionOne(request) 
     { 
      ctx = myApplicationContext.getInstance(); 
      user = ctx.getUser(); 

      if (user.hasPermission('xxx')) 
      { 

      } 
     } 
    } 
} 

La mia domanda, è, come faccio a implementare questo tipo di funzionalità:

Vale a dire:

  • Creare un contesto di applicazione, in cui posso compilare con le informazioni sensibili contesto come un connessione a database, configurazione mailer, fabbriche oggetto, informazioni di stato varie ecc.

  • Accedere a un oggetto utente (che è possibile d credenziali utente, permessi etc a)

  • Avere accesso alle variabili di sessione ecc.?

Note

  1. sarò Distribuzione del web app su Linux, e userò Apache come server web.
  2. Ai fini di questo progetto, non voglio utilizzare alcuna tecnologia Microsoft come Azure, Autenticazioni Windows ecc. (Diverso da C# e ASP.Net)
  3. Voglio utilizzare una connessione di database non elaborata, non utilizzare Entity manager (porta applicazione legacy)
+2

Hai guardato in OWIN e ASP identità? Al momento l'identità viene fornita con il modello di applicazioni ASP, così come OWIN, e gestirà tutte le tue esigenze di autenticazione. OWIN è un framework più basilare su cui tutto il resto (teoricamente) si trova - se stai cercando di costruire il tuo framework di autenticazione proprio per l'apprendimento, inizierei con OWIN. Ci sono alcuni tutorial sul sito Web ASP.net. –

risposta

5

sto lottando un po ', per capire la sequenza di eventi che si verificano dopo che una richiesta viene inviato da un/client front-end del browser, al web server.

Per questo direi this PDF Poster fornisce la migliore rappresentazione grafica dell'elaborazione della richiesta in Web API ASP.NET.

La mia domanda, è, come faccio a implementare questo tipo di funzionalità:

Vale a dire:

  • Creare un contesto di applicazione, in cui posso compilare con il contesto informazioni sensibili come un connessione al database, configurazione mailing , fabbriche oggetto, informazioni di stato varie ecc.

  • accedere a un oggetto utente (che posso aggiungere le credenziali degli utenti, i permessi ecc per)

  • avere accesso alle variabili di sessione, ecc?

Per questo vorrei dire, WebAPIs sono progettati per essere senza stato e così, l'approccio migliore è quello di creare una sessione permanente (Say nel database) e utilizzare un identificativo per la sessione (come chiave di sessione o un token) per ogni richiesta di identificare un utente e recuperare le sue variabili di sessione/informazioni sul contesto.

Ora, per implementare il tipo di funzionalità richiesto nel proprio esempio, ciò si otterrebbe con una combinazione di filtri di autenticazione e filtri di autorizzazione (More details on implementing them here).

Ogni richiesta in WebAPI viene prima elaborata dai gestori e quindi prima dell'applicazione dell'azione richiesta, vengono applicati i filtri. Per il tuo esempio, i filtri di autenticazione manterranno la funzione DoLogin e la logica user.hasPermission risiederà nei filtri di autorizzazione e solo la logica di azione risiederà nell'azione (funzione) nel controller.

enter image description here

+0

Grazie per la risposta. Tuttavia, ero già a conoscenza dello schema pdf. Sfortunatamente, non aiuta molto, poiché presuppone che il lettore abbia già familiarità con le classi ASP.Net/namespace ecc. Quello che stavo cercando era un diagramma che mappava i concetti nel flusso di lavoro alle classi del framework - Il diagramma così com'è, guarda sopra IMHO ingegnerizzato. In caso contrario, sarebbe almeno utile vedere come posso scrivere i miei filtri di autenticazione e autorizzazione. –

+0

Davvero parlando è quello che il diagramma mi ha guardato anche a prima vista. Ma una volta acquisita una conoscenza di base della webAPI, questa partecipazione è un punto fermo per qualsiasi chiarimento di cui ho bisogno. Questo collegamento fornisce maggiori dettagli sull'implementazione dell'autorizzazione e dell'autenticazione. Lo aggiorno anche nella mia risposta. - http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api – Guanxi