Ho cercato risposta a questa domanda per alcuni giorni, ma non ho riscontrato alcun successo. Pubblicherei i collegamenti, ma probabilmente occuperebbe l'intera pagina.Aggiungi ruoli a ADFS IPrincipal
Così qui è quello che ho ...
Ho un'applicazione MVC, che utilizza il protocollo WC-Federazione. Sono stato in grado di configurare l'applicazione, in modo che autentica gli utenti e restituisce le attestazioni da ADFS. Questo funziona perfettamente. Posso anche estrarre tutte le richieste senza problemi. Ma lo sto facendo all'interno di una delle azioni del controller.
E qui è quello che voglio fare ...
voglio utilizzare ADFS per autenticare l'utente, ma voglio usare i miei ruoli interni per autorizzare l'utente ad avere accesso ai controller specifici (ad esempio [Authorize(Roles = "CoolRole")]
.) Voglio essere in grado di farlo, perché ho già un'API Web che utilizza OAuth 2.0, con un database SQL Server back-end per gestire utenti e ruoli (utente interno ed esterno). Ora desidero un portale sicuro che consentire agli utenti interni di accedere ai dati con un'esperienza single-sign-on. Guardando il modello di Controller
, ho notato che ci sono alcune proprietà associate al processo di autenticazione (OnAuthentication
, OnAuthenticationChallenge
) e uno per il processo di autorizzazione (OnAuthorization
.)
Non necessariamente bisogno del codice, ma mi sento come se Ho colpito un mattone tutto, e ho bisogno di essere indicato nella giusta direzione.
UPDATE
ho provato questo:
protected override void OnAuthorization(
System.Web.Mvc.AuthorizationContext filterContext)
{
//Private class to create a new IPrincipal based on my AppUserMgr
var user = _setCurrentUser(
(ClaimsIdentity)filterContext.HttpContext.User.Identity);
filterContext.HttpContext.User = user;
base.OnAuthorization(filterContext);
}
Questa restituito una risposta 401 (non autorizzato).
e ...
protected override void OnAuthentication(
System.Web.Mvc.Filters.AuthenticationContext filterContext)
{
//Private class to create a new IPrincipal based on my AppUserMgr
var user = _setCurrentUser(
(ClaimsIdentity)filterContext.HttpContext.User.Identity);
filterContext.Principal = user;
base.OnAuthorization(filterContext);
}
Ciò richiede solo la STS numerose volte, prima che si guasti. Ho persino provato a scambiare dopo l'assegnazione, dopo che la base è stata chiamata in entrambi. Senza fortuna.
Prima di quelli precedenti, ho anche provato ad aggiungere un AuthorizeFilter al controllo, ma che non ha aiutato:
http://pratapreddypilaka.blogspot.in/2012/03/custom-filters-in-mvc-authorization.html
Sei in grado di condividere la tua implementazione. Hai qualche modello in git? – Avi