Реализация проверки подлинности и авторизации с помощью форм ASP.NET для Windows Forms или отдельного приложения WPF

Я хотел реализовать процедуры аутентификации и авторизации ASP.NET Forms для моих приложений Windows Forms или WPF, взаимодействующих с веб-службами ASP.NET WCF (и SOAP).

Используя Fiddler, я исследовал, как Silverlight взаимодействует со своей веб-службой WCF RIA Services во время процедур входа / выхода, и, насколько я понимаю, это взаимодействие представляет собой просто набор HTTP-вызовов POST и GET.

Насколько я понимаю, фактическая аутентификация и авторизация происходят на стороне службы WCF через поставщиков членства и ролей ASP.NET - я знаю, как справиться с этим с помощью кода.

То, что я точно не знаю, может быть самым высокоуровневым набором классов System.Net и их методов для реализации аутентификации и авторизации форм ASP.NET между приложением WinForms / WPF и ASP.NET WCF (/ и если возможно, также веб-служба SOAP) с сохранением сеанса связи после входа в систему, при этом файлы cookie службы / приложения ASP.NET передаются туда и сюда максимально прозрачно для меня (IOW без слишком большого количества программирования на C # / .NET Framework на низком уровне). Подойдет ли System.Net.WebClient достаточно для выполнения моей задачи? Знаете ли вы какие-нибудь готовые к использованию простые решения на C # с открытым исходным кодом?




Ответы (1)


Много лет назад я писал об этом в блоге

http://www.wiktorzychla.com/2010/04/aspnet-forms-authentication-sharing-for.html

http://www.wiktorzychla.com/2008/02/clickonce-webservice-and-shared-forms.html

Идея состоит в том, чтобы поделиться файлом cookie проверки подлинности с помощью форм, чтобы он также защищал службу wcf. Таким образом, вы даже можете запустить приложение из браузера (щелкнуть один раз) или реализовать настраиваемую форму входа в систему, которая просто отправляет имя пользователя / pwd на сервер и получает файл cookie, а затем использует его.

Технически, чтобы служба wcf была защищена файлами cookie форм, вам нужно позаботиться о нескольких ключевых элементах, все они описаны в моей записи в блоге.

person Wiktor Zychla    schedule 04.09.2015
comment
Спасибо за ваш ответ. Если я получил это правильно, вы заимствуете файлы cookie проверки подлинности ASP.NET Forms в приложении ClickOnce у пользователя, вошедшего в систему на сайте ASP.NET? И моя задача состоит в том, чтобы напрямую войти из приложения WinForms / WPF в веб-службу ASP.NET WCF / SOAP и поддерживать это вошедшее в систему соединение активным (насколько это возможно без особых усилий с автоматическим потоком файлов cookie аутентификации здесь и там), в то время как приложение WinForms / WPF взаимодействует с веб-службой через экземпляр System.Net.WebClient. Полагаю, это возможно. Посмотрите, как создаются файлы cookie при входе в систему tinyurl.com/pwlpdq3 - person ShamilS; 04.09.2015
comment
@ShamilS: Еще раз, у вас может быть метод в вашей службе, который берет что-нибудь от пользователя и выдает cookie. Таким образом, вы напрямую входите из приложения winforms в службу wcf. Кроме того, забудьте о веб-клиенте, используйте вместо него служебные прокси или хотя бы ChannelFactory. Это сэкономит вам много усилий. - person Wiktor Zychla; 04.09.2015
comment
Спасибо за дополнительную заметку. Было бы правильно, если бы я относился к этому так, как вы говорите, что если я использую прокси-сервер службы (/ ChannelFactory) вместо System.Net.WebClient, и у меня будут, скажем, методы Login, GetReport и Logout для моей веб-службы, где Login выдаст FormsAuthentication.SetAuthCookie (userName, false) [с именем пользователя / паролем, проверенным перед этим вызовом], GetReport будет использовать - if (Thread.CurrentPrincipal.Identity.IsAuthenticated) {..., а файлы cookie, созданные в Login, будут автоматически передаваться между сервер и клиент, пока веб-вызов выхода из системы не удаляет файлы cookie с помощью FormsAuthentication.SignOut ()? - person ShamilS; 04.09.2015
comment
@ShamilS: да, именно так это и нужно делать. - person Wiktor Zychla; 04.09.2015