Как передать unc учетные данные в ядро ​​.net - PullRequest
0 голосов
/ 22 февраля 2019

Мне нужно сохранить файл в unc месте, используя .net core web api.Доступ к местоположению можно получить с помощью правильного имени пользователя и пароляСледующий фрагмент кода не работает, я имею в виду, когда я пытаюсь создать каталог. Я боюсь, что неправильно передаю имя пользователя и пароль.Может кто-нибудь разобраться в этом, пожалуйста.

try
{

    var credential = new NetworkCredential("username", "password", "\\\\location\\Test");
    var testCache = new CredentialCache
    {
        { new Uri("\\\\location\\test"), "Basic", credential }
    };

    var folder = GetDestinationFolder(DateTime.Now, "\\\\location\\test");
    Directory.CreateDirectory(folder); // it throws exception saying access to the path is denied    
}
catch (Exception ex)
{
    var exxx = ex.Message;
}

1 Ответ

0 голосов
/ 22 февраля 2019

По умолчанию учетные данные наследуются от пула приложений IIS.Вы можете запустить ваше приложение под учетной записью пользователя, у которого есть разрешение на доступ к пути unc.

В качестве другого обходного пути вы можете попробовать

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
        int dwLogonType, int dwLogonProvider, out SafeAccessTokenHandle phToken);

    const int LOGON32_PROVIDER_DEFAULT = 0;
    //This parameter causes LogonUser to create a primary token. 
    const int LOGON32_LOGON_INTERACTIVE = 2;
    // Call LogonUser to obtain a handle to an access token. 
    SafeAccessTokenHandle safeAccessTokenHandle;

    [HttpGet, Route("success")]
    public string Success()
    {
        bool returnValue = LogonUser("username","domain" ,"password",
            LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
            out safeAccessTokenHandle);

        WindowsIdentity.RunImpersonated(safeAccessTokenHandle, () =>
        {
            var folder = @"\\unc path";
            Directory.CreateDirectory(folder); // it throws exception saying access to the path is denied    
        });
        return "Success Response";
    }        
}
...