Подключение к безопасному веб-сервису - PullRequest
2 голосов
/ 20 мая 2011

Я хочу подключить веб-службу (в качестве справочной службы), которая защищена сертификатом.

, для этого я делаю это:

    ServiceClient service = new ServiceClient();
    service.ClientCredentials.ClientCertificate.SetCertificate (StoreLocation.CurrentUser, StoreName.Root, X509FindType.FindBySubjectName, "Subject Name");
    ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(ValidationCallBack);
    service.SomeMethod();

    private bool ValidationCallBack(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
    {
         return true;
    }

Когда я вызываю service.SomeMethod(); метод, он выдает исключение:

"HTTP-запрос был запрещен со схемой аутентификации клиента 'Anonymous'."

Что означает эта ошибка?И как я могу избежать этого для вызова метода веб-службы?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Вы делаете правильные вещи для подключения через SSL (я предполагаю, что вашему серверу требуются клиентские сертификаты, как правило, не требуются), но не похоже, что вы передаете какие-либо учетные данные в веб-службу.

Попробуйте добавить это:

service.Credentials = System.Net.CredentialCache.DefaultCredentials;

Это передаст учетные данные текущего пользователя, вошедшего в систему, в службу.

Пока текущий пользователь имеет разрешения на доступсервис, он должен позволить вам войти. Если пользователь с разрешениями на сервис отличается от текущего пользователя, вошедшего в систему:

credentialCache cache = new CredentialCache();
cache.Add( new Uri(service.Url), // Web service URL
       "Negotiate",  // Kerberos or NTLM
       new NetworkCredential("username", "password", "domainname") );
service.Credentials = cache;

Все может стать немного сложнее, если вы используете прокси.

http://man.ddvip.com/web/bsaspnetapp/LiB0087.html выглядело нормально, если вам нужна дополнительная информация.

0 голосов
/ 20 мая 2011

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

...