Рабочая роль Azure, олицетворяющая учетную запись домена

Моя ситуация заключается в том, что у меня есть рабочая роль Azure, которой необходимо подключиться к локальному файловому ресурсу. Локальный компьютер подключен к экземпляру Azure через VPN. Использование служб федерации Active Directory для синхронизации локальной AD с Azure AD. Рабочая роль копирует определенные файлы из локальной среды в хранилище BLOB-объектов в учетной записи Azure.

Может ли рабочая роль олицетворять учетную запись домена? Если да, то как? Или как я могу достичь своей цели?

Спасибо!


person John Smith    schedule 19.09.2013    source источник


Ответы (1)


Мы делаем это, используя класс ниже

Там вы можете легко вызвать 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