ASP.NET MVC - Подсказка аутентификации HTTP

Если у Вас есть определенная проблема, Вы, вероятно, имеете определенное регулярное выражение в виду. Я взял бы то регулярное выражение, разработал бы то, что это означает в простых человеческих терминах, и работайте оттуда.

я подозреваю, что это возможно для создания общего regex случайного генератора соответствия, но это, вероятно, будет очень [еще 111] работа, чем просто обработка конкретного случая - даже если тот случай изменит несколько раз год.

(На самом деле, не может быть возможно генерировать случайные соответствия в самом общем смысле - у меня есть неопределенная память, что проблема "делает любое строковое соответствие, этот regex" является скрытой проблемой остановки. С очень сокращением regex язык у Вас может быть больше удачи все же.)

27
задан Çağdaş Tekin 22 October 2009 в 15:02
поделиться

2 ответа

Ну, чтобы потребовать базовую аутентификацию, вам нужно вернуть код состояния 401. Но это приведет к тому, что текущий модуль аутентификации выполнит свой неавторизованный обработчик по умолчанию (для аутентификации с помощью форм это означает перенаправление на страницу входа).

Я написал ActionFilterAttribte , чтобы узнать, смогу ли я добиться того же поведения, что и вы. когда не установлен модуль аутентификации в web.config .

public class RequireBasicAuthentication : ActionFilterAttribute {
   public override void OnActionExecuting(ActionExecutingContext filterContext) {
       var req = filterContext.HttpContext.Request;
       if (String.IsNullOrEmpty(req.Headers["Authorization"])) {
           var res = filterContext.HttpContext.Response;
           res.StatusCode = 401;
           res.AddHeader("WWW-Authenticate", "Basic realm=\"Twitter\"");
           res.End();
       }
   }
}

И действие контроллера:

[RequireBasicAuthentication]
public ActionResult Index() {
    var cred = System.Text.ASCIIEncoding.ASCII
            .GetString(Convert.FromBase64String(
            Request.Headers["Authorization"].Substring(6)))
            .Split(':');
    var user = new { Name = cred[0], Pass = cred[1] };
    return Content(String.Format("user:{0}, password:{1}", 
        user.Name, user.Pass));
}

Это действие успешно распечатывает имя пользователя и пароль, которые я ввел. Но я действительно сомневаюсь, что это лучший способ сделать это. У вас нет другого выбора, кроме как запросить таким образом имя пользователя и пароль?

47
ответ дан 28 November 2019 в 04:59
поделиться

Вы действительно хотите создать службу, а не веб-приложение, исходя из того, что я прочитал. Я предполагаю здесь, но я думаю, вы выбрали ASP.NET MVC, чтобы воспользоваться преимуществами маршрутизации и создания URL-адресов так, как вы хотите? Поправьте меня, если я ошибаюсь.

На мой взгляд, лучший способ решить возникшую у вас проблему - это создать веб-службы RESTful с WCF, если вы возвращаете данные. Эта статья должна помочь вам начать работу, если вы хотите пойти по этому пути.

В противном случае вам придется подняться выше по стеку для обработки запроса и его аутентификации. Если это так, я могу помочь с дополнительной информацией и кодом.

3
ответ дан 28 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: