Come separare i biscotti di grandi dimensioni in identità ASP.NET in quelle più piccole per consentire molte affermazioni?

StackOverflow https://stackoverflow.com//questions/25025979

Domanda

Sto lavorando a un prototipo di un'autorizzazione basata su rivendicazioni per la nostra applicazione MVC. Utilizziamo l'identità ASP.NET per l'autenticazione.

Vorremmo avere un reclamo per ogni azione del controller e quindi dare / portare via le affermazioni degli utenti, quindi abbiamo un controllo molto raffinato su chi può andare dove.

La nostra applicazione ha già 800 azioni e continua a crescere. Ho fatto una piccola app di prova per vedere come può essere gestito questo numero di reclami. E correre in un problema: I cookie sono limitati a 4092 byte .

e avere un gran numero di reclami aumenta il cookie di autenticazione dell'identità. Circa 600 rivendicazioni con nomi / valori brevi (5 caratteri ciascuno) dammi cookie dimensionati su 4K e utente con questo numero di reclami non è possibile accedere - cookie non può essere impostato in un browser.

e 600 reclami non è un limite per la nostra app. Probabilmente avremo bisogno di più di quello.

C'è un modo per separare i cookie Auth in alcuni biscotti più piccoli?

P.S. Se sei curioso, ecco il mio Codice per reclami "Profiler" insieme a resto del progetto .

P.P.S. Conosco le implicazioni sulle prestazioni dei biscotti di grandi dimensioni. Non preoccuparti proprio adesso.

Aggiornamento Attualmente non c'è la soluzione fuori dalla mia casella alla mia risposta. Ma sembra che non fossi l'unico con questo problema. Microsoft.Owin sta gestendo il cookie AUTH. E il codice sorgente attuale per Owin.Cookies ha ChunkingCookieManager che è assegnato per impostazione predefinita in CookieAuthenticationMiddleware < / a>.

Cattive notizie che questo codice è molto fresco (è stato registrato il 10 luglio 2014, solo 20 giorni). È disponibile attraverso il pre-rilascio di Nuget Microsoft.owin .Security.Cookies . Non sono sicuro che vorrei usare RC2 nel sito di produzione.

qualsiasi altro modo?

È stato utile?

Soluzione 2

Non ho risolto la domanda diretta. Il cookie è troppo grande e rimarrà grande con un numero elevato o affermazioni. Owin V3.0 (attualmente in RC2, non di produzione-pronto) ha un modo per bloccare i biscotti in quelli più piccoli. Ma i bei biscotti sono semplicemente cattivi. Quindi sto tenendo rivendicati solo lato server.

Ho avuto un Discussione sul forum di identità e trovato Questo Domanda che affronta le mie domande completamente. Basando la domanda, ho fatto la mia soluzione e prototipato una piccola app MVC: https://github.com/ trailmax / reclamo assumizione .

Il nucleo della soluzione è in Routine di avvio e c'è un Filtro MVC che controlla se le rivendicazioni richieste sono disponibili per l'utente.

Altri suggerimenti

stai usando le rivendicazioni in modo errato.I reclami rappresentano l'identità dell'utente, non le azioni che sono autorizzate a svolgere.Stai correndo in problemi perché stai trattando richieste come una casa per le autorizzazioni degli utenti.Dovresti davvero trovare un modo per separare i due nella tua applicazione.

Nel MVC Fashion, questo creerebbe un attributo di autorizzazione personalizzato, ottenendo l'identità dell'utente dal cookie di rivendicazione e verificando che l'identità dell'utente può eseguire qualche azione.

Vedi domande correlate qui sotto.

limitando l'accesso ai record.Le autorizzazioni basate su richiesta è una buona idea

Autorizzazione dei reclami per risorse specifiche

Dovresti usare il ruolo

[Authorize(Roles = "Admin, Role1")]
  public ActionResult Index(string id)
{....}
[Authorize(Roles = "Admin, Role2")]
  public ActionResult Index2(string id)
{....}
[Authorize(Roles = "Admin, Role1, Role3")]
  public ActionResult Index3(string id)
{....}
.

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