Ние го правим, като използваме класа по-долу
Там можете лесно да извикате Impersonate и UndoImpersonation, като подадете токена, който имаме. Моля, имайте предвид, че е важно да съхранявате сигурно идентификационните данни във вашата облачна среда.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Text;
namespace Codit.Common.Security
{
public static class Impersonation
{
[DllImport("advapi32.DLL", SetLastError = true)]
public static extern int LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
[DllImport("advapi32.DLL")]
public static extern bool ImpersonateLoggedOnUser(IntPtr hToken); //handle to token for logged-on user
[DllImport("advapi32.DLL")]
public static extern bool RevertToSelf();
public static object Impersonate(string user, string password)
{
string domain = "";
if (user.IndexOf(@"\") > 0)
{
domain = user.Substring(0, user.IndexOf(@"\"));
user = user.Substring(user.IndexOf(@"\") + 1);
}
IntPtr securityToken;
LogonUser(user, domain, password, 9, 0, out securityToken);
if (securityToken != IntPtr.Zero)
{
var newIdentity = new WindowsIdentity(securityToken);
WindowsImpersonationContext impersonationContext = newIdentity.Impersonate();
return impersonationContext;
}
throw new InvalidOperationException("The username or password combination was invalid, please verify your settings");
}
public static void UndoImpersonation(object impersonationContext)
{
var context = impersonationContext as WindowsImpersonationContext;
if (context != null) context.Undo();
}
}
}
Друго нещо, което бихте могли да направите, е да създадете локален слушател (на вашия локален сървър, работещ под необходимия акаунт). Този слушател може да търси файлове и да ги изпраща в хранилището на blob.
person
Sam Vanhoutte
schedule
20.09.2013