|
MVC-ApiController Вход от программы-клиента с авторизацией
|
|||
---|---|---|---|
#18+
Добрый усем день! Есть web-сервис с новомодным MVC4-ApiController (то есть по сути это MVC-сайт, назовем его http://webapi.loc, с возможностью обслуживать внешние web-запросы). Сделал принудительную авторизацию от своей БД, как написано в примере: http://www.arturdr.ru/net/prostaya-kastomnaya-asp-net-mvc3-sovmestimaya-avtorizatsiya/ Если зайти на сайт через браузер, то все вроде как хорошо - ввел user-psw, оно проавторизовалось и т.д., НО: теперь пытаюсь туда залезть из VBA: Dim xmlhtp As MSXML2.XMLHTTP xmlhtp.Open "GET", " http://webapi.loc/api/line", False , user, psw и здесь начинаются для меня непонятки: Если сайт открыт (запущен в браузере) и выполнен вход, то оно нормально проваливается и с авторизацией и без, но если сайт "не открыт", то оно уже никуда не идет?? Посколько тема является "типовой" и код не сложным, то выкладываю здесь фрагменты кода WebApi: =================================================================== WebConfig: <authentication mode="Forms"> <forms loginUrl="~/Account/LogOn" timeout="2880" /> </authentication> Все остальное из webConfig - "типа membershipprovider" убрано КОНТРОЛЛЕР: Авторизация: public class AccountController : Controller { private readonly AuthorizationService _authorizationService = new AuthorizationService(); // GET: /Account/Login public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = returnUrl; return View(); } // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { if (_authorizationService.ValidateUser(model.UserName, model.Password)) // валидируем пользователя { FormsAuthentication.SetAuthCookie(model.UserName, true); if (!String.IsNullOrEmpty(returnUrl)) { return RedirectToLocal(returnUrl); } return RedirectToLocal("Index"); } ModelState.AddModelError("", "Имя пользователя или пароль указаны неверно."); return View(model); } // POST: /Account/LogOff [HttpPost] [ValidateAntiForgeryToken] public ActionResult LogOff() { FormsAuthentication.SignOut(); // разлогиниваем текущего пользователя return RedirectToAction("Index", "Home"); } .... public class AuthorizationService { public virtual bool ValidateUser(string username, string password) { if (username == "test" && password == "test") //это заглушка, "test" должны получать от своей из БД { return true; } return false; } } } .................... КОНТРОЛЛЕР с ApiController (собственно web-сервисы): using System; ........ namespace webApi.Controllers { [Authorize] //если это убрать, то доступ открыт по любому, если задать - то от программы "не пускает" public class LineController : ApiController { static readonly ILineRepository repository = new LineRepository(); public int Get(int Int) { return repository.Get(Int) ); } public string Get(string Str) { return repository.Get(Str); } ................ Может кто подскажет хотя бы на уровне идеи: как обеспечить доступ к web-api со стороны программного внешнего web-запроса c аутентификацией-авторизацией. То ли здесь атрибуты-операторы как-то переставить, или идти по пути переопределения классов-интерфейсов, отвечающих за "это дело": IPrincipal MemberShipProvider??? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 15:02 |
|
MVC-ApiController Вход от программы-клиента с авторизацией
|
|||
---|---|---|---|
#18+
ВладимирЛ, ставь fiddler и смотри оба случая, потом сравнивай. это быстрее, чем тут с кодом твоим упражнятся. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 17:02 |
|
MVC-ApiController Вход от программы-клиента с авторизацией
|
|||
---|---|---|---|
#18+
Можно вопрос по другому поставить: Делаем обычный mvc4-сайт по шаблону, где уже включена (я так понимаю) аутентификация, Запускаем - все работает. Добавляем apicontroller с атрибутом [Authorize] (авторизация). Далее пытаемся достучаться до этого контроллера, а "оно" не пускает - ("Для этого запроса требуется авторизация"). То есть вопрос - а как от аутентификации или входа на сайт перейти к авторизации к одельному контролу или странице? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 11:34 |
|
MVC-ApiController Вход от программы-клиента с авторизацией
|
|||
---|---|---|---|
#18+
Или так - как запустить "механизм" авторизации на MVC-сайте со стороны HTTP-запроса: httpQ.Open "Get","ddd.loc/api/fff",false, user, psw То есть в сайт оно заходит, а дальше -> есть авторизация через web-браузер с вызовом соответствующих форм и т.д., а если идет запрос, то он сразу "ломится" к соим "данным", и авторизацию при этом надо подключать "руками", а как? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 13:06 |
|
|
start [/forum/topic.php?fid=19&fpage=12&tid=1397095]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 240ms |
total: | 363ms |
0 / 0 |