2016-01-22 38 views
10

. NET MVC 5 uygulamam ile ADFS'yi yapılandırma konusunda bir sorunum var.Yönlendirme döngüsü ile birlikte .Net MVC Yetkilendirmesi ADFS ile ilgili hak talepleri

Projemi VS 2015'te hak taleplerini kullanacak şekilde yapılandırdım ve işe yarıyor, ancak bir sorunum var.

Ben zaten ben ADFS'de sayfasına yönlendirildi doğrulanmış ediyorum rağmen

[Authorize(Roles="somenonExistingRole")] 

, Kimlik Doğrulama kullanmaya çalıştığımda kullanıcı rollerini vb sorun occures kontrol edebilirsiniz, ADFS'yi Ussing, oturum açabilir tekrar yer alır ve sayfama, döngü nerede meydana geldiğini yönlendirdim. Sayfa beni ADFS portalına gönderir, ADFS portalıma yönlendirir ve birkaç denemeden sonra ADFS'den bir hata alıyorum (birçok istek için)

Tek başına Rol sağlayıcı gibi bir şey uygulamak zorunda mıyım? veya ekstra bir şey yapılandırmam gerek. Belki sadece deneme sayısını sınırlayabilirim? Rollerimi tamamladığımda neden ADFS'ye yönlendirildim? istendiği gibi

, kodda aslında göstermek ut pek bir şey değildir: im test denetleyicisi:

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(); 
     } 
    } 

ve yapılandırmak auth bölüm

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

    app.UseCookieAuthentication(new CookieAuthenticationOptions()); 

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

     }); 
} 
+0

sizin AuthenticateAttribute nedir: VS 2015 kullanarak yeni bir MVC proje oluştururken

Bu sınıf

oluşturulmuştur? Bize – Thomas

+0

kodunu yazabilir misiniz - bellekten yazılmıştır Yetkilendirilmiş offcourse :) – bunny1985

+0

Doğrulamayı yapılandıran bir Startup.Auth sınıfınız var mı? – Thomas

cevap

11

döngü sorunu gidermek için AuthorizeAttribute'u geçersiz kılmalısınız.

Varsayılan olarak, bir kullanıcı rolleri AuthorizeAttribute gereksinimlerini karşılamıyorsa, MVC 401 yetkisiz bir şekilde döner. Bu kimlik sağlayıcısına yeniden kimlik doğrulama isteğini başlatır. Kullanıcı zaten giriş yapmış olduğundan, AD, aynı sayfaya döner ve daha sonra başka bir 401, , bir yeniden yönlendirme döngüsü oluşturarak çıkarır. Burada, uygulama bağlamında anlam ifade eden bir şey göstermek için AuthorizeAttribute'ün HandleUnauthorizedRequest yöntemini geçersiz kılıyoruz.

[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

ama kullanıcı bir rolü olduğunda çalışır. Sorun yalnızca kullanıcı rolde DEĞİLDİR. – bunny1985

+0

Mesajımı düzenledim – Thomas

+0

çok teşekkür ederim – bunny1985