Проблема с авторизацией
От: FShadow  
Дата: 05.01.13 21:44
Оценка:
Уважаемые форумчане помогите решить проблему.

Есть такой контроллер на WebAPI

public class WebUiController : ApiController
    {
        [HttpPost]
        public HttpResponseMessage Post(LogOnWebUiModel model)
        {
            if (model.Username == "john" && model.Password == "secret")
            {
                FormsAuthentication.SetAuthCookie(model.Username, true);
                var response = Request.CreateResponse(HttpStatusCode.Created, true);
                return response;
            }

            return Request.CreateResponse(HttpStatusCode.NonAuthoritativeInformation, false); ;
        }


        //[Authorize(Users = @"john")]
        [Authorize]
        public string Get()
        {
            return "This is a top secret material that only authorized users can see";
        }

    }


Действие Post проверяет логин и пароль и аутентифицирует пользователя.
Из консольного приложения пытаюсь залогиниться а затем вызвать действие Get

    static void Main(string[] args)
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://localhost:2898/api/Admin/WebUi/Post");

            httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
            httpWebRequest.Method = "POST";
            httpWebRequest.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
            httpWebRequest.KeepAlive = true;
            httpWebRequest.Headers.Add("Keep-Alive: 300");
            httpWebRequest.AllowAutoRedirect = false;
            httpWebRequest.ContentType = "text/json";

            CookieContainer cookies = new CookieContainer();
            httpWebRequest.CookieContainer = cookies;

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                var json =
                    Newtonsoft.Json.JsonConvert.SerializeObject(new { Username = "john", Password = "secret" });

                streamWriter.Write(json);
                streamWriter.Close();

                using (var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
                {
                    CookieCollection colCookie= cookies.GetCookies(new Uri(@"http://localhost:2898/"));

                    //var httpCookie = httpResponse.Cookies[".ASPXAUTH"];
                    //string httpHeadCookie = httpResponse.Headers["Set-Cookie"];
                    //var headers = httpWebRequest.Headers;

                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                    {
                        json = streamReader.ReadToEnd();
                        if (Convert.ToBoolean(json))
                        {

                            httpWebRequest = (HttpWebRequest)WebRequest.Create(@"http://localhost:2898/api/Admin/WebUi/Get");
                            httpWebRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
                            httpWebRequest.Method = "GET";
                            httpWebRequest.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
                            httpWebRequest.KeepAlive = true;
                            httpWebRequest.Headers.Add("Keep-Alive: 300");
                            httpWebRequest.ContentType = "text/html";

                            httpWebRequest.CookieContainer = new CookieContainer();
                            httpWebRequest.CookieContainer.Add(colCookie[0]);
                            
                            using (HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse()) // при вызове данного метода выдает Exeption 
                                                                                                             // The remote server returned an error: (401) Unauthorized.
                            {
                                //stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("windows-1251"));
                                StreamReader stream = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
                                string htmlStr = stream.ReadToEnd();
                            }

                        }
                    }
                }
            }
        }

Когда атрибут [Authorize] убираю и смотрю пришли ли куки в запрос, да они пришли но с данным атрибутом не пускает.
За 2 дня перечитал огромное количество форумов перепробовал различные варианты ничего не помогает. Что я делаю не так?
Пожалуйста помогите!!
vs2012 mvc4 httpwebrequest
Re: Проблема с авторизацией
От: Qodomoc Россия  
Дата: 10.01.13 11:18
Оценка:
Проверьте, что в web.config выставлена Forms Authentication.