2013-10-06 6 views
1

Я должен реализовать следующий сценарий: ASP.NET webapp 1. Пользователь регистрируется в 2. С учетными данными пользователя во время входа в систему мне нужно загрузить некоторые файлы с сайта Sharepoint;C# ASP.NET; Получить объект NetworkCredential для зарегистрированного пользователя?

Окружающая среда: - В настоящее время web.config настроен на олицетворение и окна auth. но также необходимо работать с базовой аутентификацией. - Я использую System.Net.WebClient для загрузки файлов Sharepoint с использованием веб-сервисов сайта Sharepoint, и для этого WebClient нужен объект Credential, поэтому мне нужен объект NetworkCredential.

P.S: CredentialCache.DefaultCredentials и CredentialCache.DefaultNetworkCredentials возвращает учетные данные с пустым именем пользователя и pw, поэтому я не могу использовать его для доступа к сайту Sharpeoint. Это также непригодно для получения System.Security.Principal.WindowsIdentity.GetCurrent() или System.Web.HttpContext.Current.User.Identity, потому что я могу получить только имя пользователя таким образом и для создания экземпляра NetworkCredential мне нужно uname и pw.

+0

Как вы определяете, что учетные данные пусты? Документы MSDN для состояния «DefaultCredentials». Экземпляр ICredentials, возвращенный DefaultCredentials, не может использоваться для просмотра имени пользователя, пароля или домена текущего контекста безопасности ». –

+0

Ну, во время отладки я вижу пустую строку в поле имени пользователя и пароля. Хотя на основании вашего комментария это нормально, я пытаюсь подключить сайт Sharepoint с этими учетными данными по умолчанию, и я получаю неустранимое исключение, поэтому очевидно, что учетные данные не являются зарегистрированными учетными данными пользователя, поскольку доступ к зарегистрированному пользователю сайт Sharepoint. – user1307533

+0

Идея: поскольку я могу получить зарегистрированный идентификатор пользователя через System.Security.Princial.WindowsIdentity.GetCurrent(), есть ли способы подключения к веб-сервисам сайта Sharepoint с использованием контекста олицетворения? Я имею в виду использование WindowsIdentity.Impersonate(). – user1307533

ответ

4

FYI, Думаю, мне удалось решить проблему; Я использую контекст олицетворения, и я использую CredentialCache.DefaultNetworkCredentials, и я установил WebClientUseDefaultCredentials в true, и это, похоже, работает до сих пор. Итак:

WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); 
using (identity.Impersonate()) 
{ 
    webClient.Credentials = CredentialCache.DefaultNetworkCredentials; 
    webClient.UseDefaultCredentials = true; 
} 

Это работает для меня.

1

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

How do I authenticate a WebClient request?

EDIT Убедитесь, что это в web.config для того, чтобы окна аутентификации работать правильно:

<system.web> 

    <authentication mode="Windows" /> 

    <authorization> 
     <deny users="?"/> 
     </authorization> 

</system.web> 

+0

Привет, спасибо за ответ, который будет полезен в средах, где формы auth., но он также работает с Windows Auth. Итак, вы говорите, что нет способа подключиться к сайту sharepoint из приложения с зарегистрированным пользователем, когда пользователь уже аутентифицирован сам? Если это правда, я должен сказать, что я h8 M $ .. – user1307533

+0

Ну, еще одно дело, что объект NetworkCredentials возвращает пустые значения в режиме отладки, поэтому вы, как разработчик, их не видите, но они исправляют один раз в выпуске. Может ли это быть вашим делом? – Robert

+0

«Это может быть ваш случай?» Не знаю, но я проверю. – user1307533