2015-04-30 6 views
1

Я сослался на сотни сообщений и пока не повезло. Base.AuthorizeCore (httpContext) всегда возвращает false.base.AuthorizeCore (httpContext) всегда ложно

Я запускаю приложение MVC из VS2012 с помощью IIS express. Многие люди смогли решить эту проблему с помощью проверки подлинности на основе форм. Но я тоже это пробовал. Пожалуйста, помогите ..

Ниже приведен авторизованный автоответчик.

public class AuthorizeADAttribute : AuthorizeAttribute 
{ 
    public string Groups { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (base.AuthorizeCore(httpContext)) 
     { 

     // var authorized = (httpContext.User.Identity.IsAuthenticated); 


      /* Return true immediately if the authorization is not 
      locked down to any particular AD group */ 
      if (String.IsNullOrEmpty(Groups)) 
       return true; 

      // Get the AD groups 
      var groups = Groups.Split(',').ToList<string>(); 

      // Verify that the user is in the given AD group (if any) 
      var context = new PrincipalContext(ContextType.Domain, "MYDOMAIN"); 
      var userPrincipal = UserPrincipal.FindByIdentity(context, 
               IdentityType.SamAccountName, 
               httpContext.User.Identity.Name); 

      foreach (var group in groups) 
      { 
       try 
       { 
        if (userPrincipal.IsMemberOf(context, IdentityType.Name, group)) 
         return true; 
       } 
       catch (NoMatchingPrincipalException exc) 
       { 
        var msg = String.Format("While authenticating a user, the operation failed due to the group {0} could not be found in Active Directory.", group); 
        System.ApplicationException e = new System.ApplicationException(msg, exc); 
        // ErrorSignal.FromCurrentContext().Raise(e); 
        return false; 
       } 
       catch (Exception exc) 
       { 
        var msg = "While authenticating a user, the operation failed."; 
        System.ApplicationException e = new System.ApplicationException(msg, exc); 
        //ErrorSignal.FromCurrentContext().Raise(e); 
        return false; 
       } 
      } 
     } 
     return false; 
    } 
} 

Передаю название группы, как это. Это отлично работает, когда я запускаю приложение из VS2012 с помощью IIS Express. Файл web.config установлен в . В настройках IIS с помощью проверки подлинности на основе форм установлено значение. Но перенаправление URL идет на login.aspx. У меня нет страницы входа в мою заявку

Но когда я публикую веб-сайт в IIS. Появится страница с ошибкой.

[AuthorizeAD(Groups = "DevUsers")] 
public ActionResult Index() 
{ 

    return View(); 
} 
+0

Нам нужен какой-то контекст, который сможет вам помочь. Пожалуйста, прочтите это sscce.org – reggaeguitar

+0

Какая страница ошибки? Какая ошибка? –

+0

Ваш вопрос действительно запутан и не имеет большого смысла. Как вы можете использовать проверку подлинности с помощью форм, но не имеете учетной записи? Как вы ожидаете, что ваш пользователь войдет в систему? Кажется, вы используете код Active Directory в атрибуте Authorize, что мало смысла, если вы используете проверку подлинности с помощью форм. –

ответ

0

base.AuthorizeCore (httpContext) работает на основе ролей и группы. у вас может не быть группы «DevUsers». Добавить публичную строку CustomGroups {get; задавать; } В класс и назвать его так:

[AuthorizeAD(CustomGroups = "DevUsers")] 
public ActionResult Index() 
{ 

    return View(); 
} 

таким образом, который вы отправляете группу нуль, то base.AuthorizeCore (HttpContext) просто делает AUTHENTICATE часть, и вы делаете группы и роль в вашей пользовательской функции.

 Смежные вопросы

  • Нет связанных вопросов^_^