2016-01-22 11 views
10

Ho un problema nella configurazione di ADFS con l'app .Net MVC 5.Ciclo di reindirizzamento con .Net Attributo MVC Autorizza con richieste ADFS

Ho configurato il mio progetto in VS 2015 per utilizzare le attestazioni e funziona correttamente, ma ho un problema.

posso accedere, ussing ADFS, posso controllare ruoli degli utenti, ecc Il problema occures quando provo ad usare

[Authorize(Roles="somenonExistingRole")] 

nonostante che sto già autenticato sto reindirizzato alla pagina ADFS, quando l'Autenticazione si svolge di nuovo, e io sono reindirizzato alla mia pagina, dove si verifica loop. Pagina inviami al portale ADFS, ADFS reindirizza il mio al portale e dopo alcuni tentativi ottengo un errore da ADFS (a molte richieste)

Devo implementare qualcosa come provider di ruoli da solo? o ho bisogno di configurare qualcosa in più. Forse potrei limitare il numero di tentativi? Perché vengo reindirizzato a ADFS quando ho già i miei ruoli?

non c'è molto da mostrare actualy nel codice, ut come richiesto: il controller che im test:

public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 
     [Authorize] 
     public ActionResult About() 
     { 
      var u = HttpContext.User; 


      if (u.IsInRole("/")) 
      { 
       ViewBag.Message = "User is in role."; 
      } 
      else 
      { 
       ViewBag.Message = "User is NOT in role."; 
      } 

      return View(); 
     } 
     [Authorize(Roles = "/nonexistingRole")] 
     public ActionResult Contact() 
     { 

      ViewBag.Message = "Your contact page."; 

      return View(); 
     } 
    } 

e la sezione di configurazione auth

public void ConfigureAuth(IAppBuilder app) 
{ 
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); 

    app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

    app.UseWsFederationAuthentication(
     new WsFederationAuthenticationOptions 
     { 
      Wtrealm = realm, 
      MetadataAddress = adfsMetadata, 

     }); 
} 
+0

Qual è il tuo AuthenticateAttribute? Potete per favore mostrarci il codice – Thomas

+0

sory - Scritto dalla memoria Autorizzare il servizio :) – bunny1985

+0

Avete una classe Startup.Auth che configura l'autenticazione? – Thomas

risposta

11

per risolvere il problema del ciclo , è necessario ignorare lo AuthorizeAttribute.

Per impostazione predefinita, MVC restituisce un valore 401 Non autorizzato quando i ruoli di un utente non soddisfano i requisiti AuthorizeAttribute. Ciò inizializza una richiesta di riautenticazione al provider di identità. Poiché l'utente ha già effettuato l'accesso, AD ritorna alla stessa pagina, che quindi emette un altro 401, creando un ciclo di reindirizzamento. Qui, sostituiamo il metodo HandleUnauthorizedRequest di AuthorizeAttribute per mostrare qualcosa che ha senso nel contesto della nostra applicazione.

Questa classe è stata generata quando si crea un nuovo progetto MVC utilizzando VS 2015:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute 
{   
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAuthenticated) 
     { 
      //One Strategy: 
      //filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden); 

      //Another Strategy: 
      filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary(
        new 
        { 
         controller = "Error", 
         action = "ShowError", 
         errorMessage = "You do not have sufficient priviliges to view this page." 
        }) 
       ); 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
} 
+0

ma funziona quando l'utente ha un ruolo. il problema si verifica solo quando l'utente NON è nel ruolo. – bunny1985

+0

Ho modificato il mio post – Thomas

+0

grazie mille – bunny1985

Problemi correlati