Запрос Javascript для результата JSON в ASP.NET MVC 3 с использованием проверки подлинности с помощью форм - PullRequest
2 голосов
/ 09 апреля 2011

У меня есть MVC 3 REST API с простым контроллером: ApiController. Существует метод Foo в ApiController, который принимает некоторую строковую информацию и возвращает результат JSON:

public class ApiController : Controller
{
    [HttpPost]
    public JsonResult Foo(string input)
    {
        ...
    }
}

Я хочу, чтобы метод JQuery вызывал Foo с некоторыми введенными пользователем данными и отображал результат.

Подвох в том, что я хочу проверить, что пользователю разрешен доступ к Foo. Каков наилучший способ сделать это в ASP.NET MVC 3? Я думаю, что ответ заключается в использовании SSL и базовой аутентификации, но я понятия не имею, как это будет выглядеть. Кроме того, я должен свернуть мой собственный хэширование / посол пароля или есть какой-то способ просто использовать Аутентификацию по формам?

Редактировать : обратите внимание, что я пытаюсь создать API, который могут использовать сторонние разработчики. Например, если кто-то пишет подключаемый модуль браузера в стиле Rapportive, который сканирует ваш Gmail, отправляет текст в Foo и отображает его в браузере.

Кроме того, я полагаю, что только использование проверки подлинности с помощью форм отправит информацию об имени пользователя и пароле в виде простого текста, верно? Я не уверен, как реализовать SSL, чтобы предотвратить это.

Ответы [ 2 ]

2 голосов
/ 09 апреля 2011

Вы можете использовать FormsAuthentication и атрибут [Authorize]. Таким образом, у вас может быть AccountController с действием LogOn, которое будет доступно только через HTTPS. Этот контроллер позволит клиентам проходить аутентификацию и получать cookie-файл аутентификации, который будет повторно использоваться для доступа к API:

public class AccountController: Controller
{
    [HttpPost]
    [RequireHttps]
    public ActionResult LogOn(string username, string password)
    {
        // TODO: verify the credentials and emit an authentication cookie if valid
        // return some result (JSON?) to indicate whether the operation succeeded or
        // not
    }
}

тогда все, что осталось, это украсить другие действия контроллера, которые вы хотите защитить, с помощью атрибута [Authorize]:

public class ApiController : Controller
{
    [HttpPost]
    [Authorize]
    public JsonResult Foo(string input)
    {
        ...
    }
}

Так что теперь клиенту необходимо сначала вызвать действие LogOn и извлечь соответствующий файл cookie аутентификации в ответе, который будет отправлен вместе с последующими вызовами вашего API.

0 голосов
/ 09 апреля 2011

Вы должны иметь возможность использовать атрибут [Authorize], чтобы делать то, что вы хотите здесь.См. Следующие подробности и пример в MSDN: http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx

Вы можете авторизовать определенных пользователей или пользователей в пределах определенной роли.

Проверка подлинности на основе форм по умолчанию, предоставляемая при создании нового (непусто) ASP.NET MVC проект позволит вам авторизовать пользователей.

...