我的情况是我有一个Azure辅助角色,需要连接到本地文件共享。本地通过VPN连接到Azure实例。使用Active Directory联合身份验证服务将本地AD与Azure AD同步。辅助角色是将特定文件从本地帐户复制到Azure帐户中的Blob存储。
工作者角色是否可以冒充域帐户?如果是这样,怎么样?或者我如何实现我的目标?
谢谢!
答案 0 :(得分:3)
我们这样做,使用下面的课程
通过传入我们拥有的令牌,您可以轻松调用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存储区。