ОБСУЖДЕНИЕ

Передача методу Webservice-а X509certificate-параметра

4 ответов 6,5 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Статус
Закрыто для дальнейших ответов.
Автор темы
Здравствуйте!

Есть веб сервис, которому необходимо проводить аутентификацию пользователей.
Допустим серивис имеет метод Login которому передается login/password и сертификат пользователя (чисто для примера). К сервису подключается WindowsApplication и производит вызов этого метода.
Проблема: login/password как string'и передаются без проблем, а передача X509Certificate вызывает такую ошибку:

Argument '3': cannot convert from 'System.Security.Cryptography.X509Certificates.X509Certificate' to 'Client.test.X509Certificate'

Вот прототип метода Web-сервиса:

[WebMethod]
public uint Login( string login,
string password,
X509Certificate ClientCert)
{
...


А так пытаюсь его вызвать из WindowsApplication:


test.Service s1 = new Client.test.Service();
X509Certificate cert = new X509Certificate("C:\\testClientCert.cer");
s1.Login("name", "pass", cert);
...


С чем такое может быть связано?
Если пытаюсь в WindowsApplication создавать объект класса Client.test.X509Certificate - он создается, но это не понятно (мне) что такое вообще. Конструктор никаких аргументов вообще не принимает, как этот объект инициализировать тоже не понятно. В общем хепл, плиз...


P.S. И еще вопрос. Как лучше всего проводить аутентификацию клиета? создавать для него сессионную переменную, каждому методу сервиса передавать структуру (login/password/ClientCertificate) или есть варианты лучше?

Спасибо!
 
1. Есил коротко - то. передавай X509Certificate.GetRawCertDataString. Client.test.X509Certificate - это прокси, созданный студией по образу и подобию, в нем кроме public свойств ничего нет.

2. Переменная в сесии (не забудь сессию включить для web service), HTTP Authentication (http://msdn2.microsoft.com/en-us/library/sxhw3bcy.aspx), токены,.... смотря какой уровень секьюрности требуется.
 
Pasha, спасибо!

1. Попробую.
2. Безопасно ли использовать сессии в WebSerivce-ах для аутентификации/авторизации пользователей? - Понятно, что "смотря как сделать", но является ли такой подход изначально уязвимым? Насколько накладно (по использованию ресурсов) для сервера их использование? Использовать токены/надстроки типа WSE не хотелось бы.
 
Сессия привязывается через Cookie (ASP.NET_SessionId). Cookies передаются по http в открытом виде. Вобщем, https - твой выбор. Расход ресурсов - почти никакой.
Хотя, сессия не нужна, просто cookies тоже вполне хватит. :)
 
Pasha, еще раз спасибо!

Кстатьи X509Certificate.GetRawCertData() помогло :)
 
Статус
Закрыто для дальнейших ответов.