Серверные куки? - PullRequest
       11

Серверные куки?

0 голосов
/ 05 августа 2009

Я унаследовал довольно запутанный проект. Первоначальный дизайнер создал «cookie», который, по-видимому, был на стороне сервера, а не на основе клиента (хотя я мог бы ошибаться в этой части). Он использует это для того, что он назвал «Наименее привилегии, единый вход». У меня есть следующий код во всех прокси веб-служб, которые он настроил:

[WebServiceBinding(Name = "ISecurityManager", Namespace = "urn:riv:apis:security:forms:ver1")]
public partial class SecurityManager : SoapHttpClientProtocol, ISecurityManager
{
    public SecurityManager()
    {
        //Url = CookieManager.WebServiceUrl(String.Empty, ref CookieContainer);
        // I’d like to replace the following code with a call like this...

        CookieContainer = new System.Net.CookieContainer();
        string urlSetting = ConfigurationManager.AppSettings["SecurityManager"];

        if (urlSetting != null)
            Url = urlSetting;
        else
            Trace.TraceWarning("No URL was found in application configuration file");

        string cookieName = FormsAuthentication.FormsCookieName;
        string cookiePath = FormsAuthentication.FormsCookiePath;
        string cookieDomain = Properties.Settings.Default.CookieDomain;
        HttpCookie authCookie = HttpContext.Current.Request.Cookies[cookieName];

        if (null != authCookie)
            CookieContainer.Add(new Uri(urlSetting), new System.Net.Cookie(cookieName, authCookie.Value, cookiePath, cookieDomain));
    }
….

У меня также есть этот код в значительной степени везде :

string cookieName = FormsAuthentication.FormsCookieName;
string SecurityContext.ApplicationName = HttpContext.Current.Request.Cookies[cookieName].Path;
string SecurityContext.UserName = HttpContext.Current.User.Identity.Name;

if (!string.IsNullOrEmpty(SecurityContext.UserName))
….

Во всех случаях, когда он идет, чтобы получить authCookie, он приходит в ноль или SecurityContext.UserName пустое. Я не гуру печенья, и большая часть кода этого парня запутана - и ноль документации.

Может ли кто-нибудь сделать голову или хвост из намерений блоков кода?

ТИА

Ответы [ 2 ]

1 голос
/ 11 августа 2009

FormsAuthentication для метода веб-службы? Хранить учетные данные аутентификации в куки? В этой истории так много всего плохого. (Примечание: тяжелая запутанность кода должна восприниматься как знак.)

Назначение блоков кода, по-видимому, заключается в использовании структуры cookie для идентификации пользователя во время вызова метода. Предполагается, что пользователь уже прошел проверку подлинности и что файл cookie для проверки подлинности присутствует во всех запросах.


РЕДАКТИРОВАТЬ: немного больше информации о «куки-файлах на стороне сервера» - ссылки, которые вы видите на System.Net.Cookie и так далее .Net Framework классы для обработки куки-файлов. Cookies - это фрагменты данных на стороне клиента, которые находятся либо в памяти клиента (обычно это веб-браузер), и / или сохраняются в виде текстовых файлов где-то в локальной файловой системе клиента. Большинство веб-приложений, которые устанавливают файлы cookie на стороне клиента, предполагают, что имеют дело с веб-браузером, поскольку все основные поставщики браузеров поддерживают файлы cookie.

Когда для запроса URL-адреса используется веб-браузер, в фоновом режиме отправляется множество информации, скрытой от пользователя: IP-адрес, тип браузера и ОС и т. Д. В этот список входят файлы cookie. для данного домена URL (есть правила HTTP, с которыми согласны браузеры). Код, который вы просматриваете, - это конкретные классы .Net Framework для структурированной обработки этих значений файлов cookie.


Большинство приложений, использующих веб-сервисы, полностью не сохраняют состояния - нет файлов cookie, нет сеансов и ничего. Хотя клиент веб-службы может реализовать поддержку файлов cookie, предполагать или требовать поддержку файлов cookie для веб-службы глупо.

В сценарии кода, который вы отлаживали для обнаружения нулевых значений, скорее всего, вызывающее приложение не поддерживает куки, что фактически делает весь блок кода недействительным. Это разбито по замыслу.

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

0 голосов
/ 06 августа 2009

Ну, очевидно, он пытается создать провайдера безопасности / авторизации, который, очевидно, работает плохо или вообще не работает Я рекомендую вам взглянуть на Enterprise Library для этой функциональности. Блок приложения безопасности QuickStart . Затем посмотрите на кэширование токена безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...