Copie de fichiers sur le réseau (nécessitant une authentification)
Est-il possible de s'authentifier en tant qu'local (pas de réseau) de l'utilisateur afin de copier des fichiers sur le réseau .Net?
net use
n'est pas une option, et je n'arrive pas à obtenir LogonUser de travail.
Des idées?
[Modifier] Voici un code:
public class UserImpersonator : IDisposable
{
private WindowsImpersonationContext _impersonationContext;
private IntPtr _userHandle = IntPtr.Zero;
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
out IntPtr phToken
);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool CloseHandle(IntPtr hHandle);
public UserImpersonator(string username, string password)
{
LogonUser(username, "", password, (int)LogonType.LOGON32_LOGON_NETWORK,
(int)LogonProvider.LOGON32_PROVIDER_DEFAULT, out _userHandle);
_impersonationContext = WindowsIdentity.Impersonate(_userHandle);
}
public void Dispose()
{
CloseHandle(_userHandle);
_impersonationContext.Undo();
}
private enum LogonType : int
{
LOGON32_LOGON_INTERACTIVE = 2,
LOGON32_LOGON_NETWORK = 3,
LOGON32_LOGON_BATCH = 4,
LOGON32_LOGON_SERVICE = 5,
LOGON32_LOGON_UNLOCK = 7,
LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
LOGON32_LOGON_NEW_CREDENTIALS = 9,
}
private enum LogonProvider
{
LOGON32_PROVIDER_DEFAULT = 0,
}
}
Quand j'enveloppe le File.Copy
opération dans using(new UserImpersonator(username, password))
, j'obtiens:
Système.IO.IOException: échec d'ouverture de session: nom d'utilisateur inconnu ou mot de passe incorrect.
Si, toutefois, j'ai d'abord essayer de se connecter à l'action dans l'explorateur (à l'entrée de l'authentification de l'info quand il le demande), l' File.Copy
œuvres. Il semble que le code ci-dessus ne rien faire du tout.
OriginalL'auteur BlueRaja - Danny Pflughoeft | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser WNetUseConnection avec p/invoque.
Voir ce fil:
L'accès à un Fichier Partagé (UNC) à Partir d'une Distance, un Domaine Non Approuvé Avec les informations d'Identification
OriginalL'auteur Joe
Je peux vous diriger à ma réponse j'ai mis plus de ici? Il doit travailler pour vos besoins.
OriginalL'auteur Jesse C. Slicer
Vous avez vraiment besoin pour vous connecter à un compte qui est membre d'un groupe sur le contrôleur de domaine, ou tout simplement de vous connecter directement sur un compte DC. Sans plus d'informations, cependant, je ne suis pas sûr de ce que vous rencontrez des problèmes avec. Pourriez-vous poster le code?
modifier
Ok, je vois deux problèmes.
Le principal problème est que vous passez une chaîne vide pour le paramètre de domaine de LogonUser. Essayer de passer dans le nom de l'ordinateur local ou sur le réseau DC.
Le côté problème, c'est que vous avez besoin de vous connecter en utilisant Batch ou Interactif, pas de Réseau. Réseau de connexion vous donne un jeton d'emprunt d'identité, qui n'est pas d'ouverture de session, ce qui peut vous empêcher d'atteindre les ressources du réseau, sauf délégation est activé.
Aussi, une fois que vous obtenez ce travail, vous allez avoir à retirer le IntPtr entièrement et de le remplacer par un SafeHandle.
S'il vous plaît laissez-nous savoir si cela aide.
Et si le nom de l'ordinateur est inconnu..? (Je ne connais que l'adresse IP)
Je ne crois pas une IP va travailler ici. Une possibilité est de faire une recherche DNS inverse pour obtenir un nom de machine de la propriété intellectuelle. L'autre est d'utiliser le nom de la machine en cours afin de vous connecter à un compte local qui est dans un groupe DC. Mais, vraiment, vous devez connaître le nom de la DC, et il n'est pas un risque de sécurité important pour le placer dans votre application.config.
Le seul compte qui a accès à de l'action est locale sur l'ordinateur. Ce n'est pas de mon fait - ils sont liés à de grosses machines, qui nous n'avons aucun accès.
OriginalL'auteur Steven Sudit