Ещё раз о моделях безопасности в Web Service.
Ещё раз о моделях безопасности в Web Service.
Для меня, как и остальных начинающих разработчиков на платформе .NET самой
большой сложностью было проникнуться её духом.
Таким витиеватым введением статейка снабжена не случайно. Речь в ней пойдёт не
о программировании, а о разработке.
Разработка программных продуктов, как известно, начинается с выбора
архитектуры. Не надо быть гуру, чтобы догадаться с трёх раз о том, какое
приложение пишется. Это приложение к базе данных. Приложение новое, описывается
на специализированном мастадайном сайте.
Дополнительно. Я работаю в крупной компании с тысячами подразделений,
территориально разнесённых на тысячи километров. Корпоративных сетей не
напрокладываешься, реплицировать будешь всю жизнь, ну и потомкам немного
оставишь.
Теперь о программной архитектуре:
W2k, .NET Framework, IIS, C#, MSSQL2K, XMLSQL3 etc
Как руководство к действию я рекомендую использовать свою статью, как
руководство к действию только в случае полного соответствия программного
обеспечения приведённому списку (поверьте моему 8 летнему опыту разработки).
Теперь условие ЗАДАЧИ.
- данные, как говорил Глушков данные реплицируются с самыми высокими качеством
и скоростью, если оно не реплицируются вообще. - система территориально
разнесена, поэтому следует использовать Internet каналы связи. - данные
критичны как к изменению, так и к прослушиванию необходимо потоковое
шифрование. - использование нескольких серверов само собой предполагает
концепцию "одной точки входа".
Лирическое отступление.
Мне на выработку решения потребовалось около 2 месяцев особую признательность
за такие темпы хотелось бы высказать госпоже Mary Kirtland из MSDN за статью
"Authentication and Authorization" в одноимённой сети. Прочитанная в самом
начале работы, она как потерянная ссылка на COM объект оглупляла меня и прочими
изощрёнными способами препятствовала решению задачи. Побольше таких бездарных
статей и разработка одного программного продукта превратится в дело всей жизни.
Конец лирического отступления.
Решение ЗАДАЧИ.
В качестве механизма Аутентификации использовать сертификаты. Устанавливается
Сервер сертификатов.
Лирическое отступление.
Первый раз мне пришлось исправлять ошибку в русской редакции Web сервера
сертификатов полтора года назад. Ошибка - вина переводчиков, типичная опечатка,
не позволяющая разработчикам упростить достаточно муторный процесс выписки
сертификата. Прошло 2 SP, а bug и ныне там. И обо мне все говорят, что я
занудный.
Конец лирического отступления.
Естественно предположить создание Active Directory, для того, чтобы
администрирование можно было проводить как-то по-человечески.
Ну, без ручного - автоматизированного mapping-а сертификатов в IIS не обойтись,
но согласитесь - лиха беда - начало по сравнению с трёхкратным созданием
пользователей. Так в двух словах серверная часть была приспособлена для
авторизации.
Третья часть.
Замечательная вещь Windows NT account в MSSQL2K. Но при использовании Anonymous
это работает не так хорошо. Благо impersonating за нас выполнил IIS, когда мы
мапили сертификаты. Теперь всё что нам остаётся, после всех настроек и экспорта
сертификата - это написать строку:
try
{
ws1.soap m_ws; // ws1 - web reference
m_ws = new ws1.soap(); //Yes this code line costs 2 month
m_ws.ClientCertificates.Add(System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(@"c:\test.cer"));
int rc=0;
this.dataSet1 = m_ws.mf(out rc); //this method return some data in dataset format
this.dataGrid1.SetDataBinding(this.dataSet1,""); //V R see it
}
catch(System.Security.Cryptography.CryptographicException ex)
{
this.Text=ex.Message ; //Or not by security risen
}
Best Wishes
Dr. Wicked.
|