установка куки в сервисе wcf - PullRequest
0 голосов
/ 28 марта 2011

У меня есть приложение asp mvc, которое использует wcf остальные службы (все в одном окне). Для аутентификации звонков, Я пытаюсь установить файлы cookie внутри службы отдыха wcf.

Код на стороне клиента -

        HttpResponseMessage resp;
        HttpClient client = new HttpClient("http://localhost/auth/login/");
        resp = client.Get();

В веб-сервисе я просто использую FormsAuthentication для установки authcookie.

        HttpCookie authCookie = FormsAuthentication.GetAuthCookie("foo", false);
        HttpContext.Current.Response.Cookies.Add(authCookie);

Предполагается, что учетные данные жестко закодированы в коде - если я физически перехожу на страницу браузера

       http://localhost/auth/login 

(учетные данные жесткого кода в коде) Я вижу, что установлен файл cookie для аутентификации. Однако, если я просто вызываю его через код (как показано выше), cookie-файл аутентификации не устанавливается.

Есть ли что-то очевидное, что я здесь пропускаю?

1 Ответ

1 голос
/ 29 марта 2011

Когда вы вызываете сервис WCF программно, файл cookie, который он устанавливает, сохраняется в экземпляре HttpClient.Клиентский браузер никогда не видит его, поэтому он никогда не устанавливается внутри него.Поэтому вам нужно будет установить его вручную:

using (var client = new HttpClient("http://localhost/auth/login/"))
{
    var resp = client.Get();
    // Once you get the response from the remote service loop
    // through all the cookies and append them to the response
    // so that they are stored within the client browser.
    // In this collection you will get all Set-Cookie headers
    // sent by the service, so find the one you need and set it:
    foreach (var cookie in result.Headers.SetCookie)
    {
        // the name of the cookie must match the name of the authentication
        // cookie as you set it in your web.config.
        var data = cookie["SomeCookieName"];
        Response.AppendCookie(new HttpCookie("SomeCookieName", data));
    }
}
...