亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

通過ASP.net程序創建域帳戶故障

2019-11-18 19:27:59
字體:
來源:轉載
供稿:網友

我曾經成功地使用windows程序成功的創建了一批帶郵箱的域帳戶,但是,當我把這段代碼交給我的一個同事(她負責開發Web應用)遷移到asp.net中后,只能創建域帳戶,不能創建郵箱。為什么呢?

我們咨詢了微軟的工程師,他告訴我們,這是由于asp.net的權限不夠,我們應該在asp.net模擬用戶,這樣就可以成功創建。

我將微軟的相關文章摘錄下來:

 

模擬 IIS 驗證的帳戶或用戶

若要在收到 ASP.NET 應用程序中每個頁的每個請求時模擬 Microsoft Internet 信息服務 (IIS) 身份驗證用戶,必須在此應用程序的 Web.config 文件中包含 <identity> 標記,并將 impersonate 屬性設置為 true。例如:

<identity impersonate="true" />


為 ASP.NET 應用程序的所有請求模擬特定用戶

若要為 ASP.NET 應用程序的所有頁面上的所有請求模擬特定用戶,可以在該應用程序的 Web.config 文件的 <identity> 標記中指定 userName 和 passWord 屬性。例如:

<identity impersonate="true" userName="accountname" password="password" />


注意:在線程上模擬特定用戶的進程的標識必須具有“作為操作系統的一部分”權限。默認情況下,Aspnet_wp.exe 進程在名為 ASPNET 的計算機帳戶下運行。不過,此帳戶沒有模擬特定用戶所需的權限。如果您嘗試模擬特定用戶,則會出現一條錯誤信息。

要解決此問題,請使用下列方法之一:

為 ASPNET 帳戶(權限最低的帳戶)授予“作為操作系統的一部分”權限。

注意:雖然此方法可以解決問題,但 Microsoft 不建議使用此方法。

在 Machine.config 文件的 <PRocessModel> 配置部分中,將運行 Aspnet_wp.exe 進程所使用的帳戶更改為 System 帳戶。

在代碼中模擬身份驗證用戶

若要僅在運行代碼特定部分時模擬身份驗證用戶 (User.Identity),您可以使用以下代碼。此方法要求身份驗證用戶標識的類型為 WindowsIdentity。

Visual Basic .NET

Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()
'Insert your code that runs under the security context of the authenticating user here.
impersonationContext.Undo()


Visual C# .NET

System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =
((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
//Insert your code that runs under the security context of the authenticating user here.
impersonationContext.Undo();


Visual J# .NET

System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =
((System.Security.Principal.WindowsIdentity)get_User().get_Identity()).Impersonate();
//Insert your code that runs under the security context of the authenticating user here.
impersonationContext.Undo();


在代碼中模擬特定用戶

若要僅在運行代碼特定部分時模擬特定用戶,請使用以下代碼:

Visual Basic .NET

<%@ Page Language="VB" %>
<%@ Import Namespace = "System.Web" %>
<%@ Import Namespace = "System.Web.Security" %>
<%@ Import Namespace = "System.Security.Principal" %>
<%@ Import Namespace = "System.Runtime.InteropServices" %>
<script runat=server>
Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
Dim LOGON32_PROVIDER_DEFAULT As Integer = 0
Dim impersonationContext As WindowsImpersonationContext
Declare Function LogonUserA Lib "advapi32.dll" (ByVal lpszUsername As String, _
ByVal lpszDomain As String, _
ByVal lpszPassword As String, _
ByVal dwLogonType As Integer, _
ByVal dwLogonProvider As Integer, _
ByRef phToken As IntPtr) As Integer
Declare Auto Function DuplicateToken Lib "advapi32.dll" ( _
ByVal ExistingTokenHandle As IntPtr, _
ByVal ImpersonationLevel As Integer, _
ByRef DuplicateTokenHandle As IntPtr) As Integer
Declare Auto Function RevertToSelf Lib "advapi32.dll" () As Long
Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Long
Public Sub Page_Load(ByVal s As Object, ByVal e As EventArgs)
If impersonateValidUser("username", "domain", "password") Then
'Insert your code that runs under the security context of a specific user here.
undoImpersonation()
Else
'Your impersonation failed. Therefore, include a fail-safe mechanism here.
End If
End Sub
Private Function impersonateValidUser(ByVal userName As String, _
ByVal domain As String, ByVal password As String) As Boolean
Dim tempWindowsIdentity As WindowsIdentity
Dim token As IntPtr = IntPtr.Zero
Dim tokenDuplicate As IntPtr = IntPtr.Zero
impersonateValidUser = False
If RevertToSelf() Then
If LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
tempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
impersonationContext = tempWindowsIdentity.Impersonate()
If Not impersonationContext Is Nothing Then
impersonateValidUser = True
End If
End If
End If
End If
If Not tokenDuplicate.Equals(IntPtr.Zero) Then
CloseHandle(tokenDuplicate)
End If
If Not token.Equals(IntPtr.Zero) Then
CloseHandle(token)
End If
End Function
Private Sub undoImpersonation()
impersonationContext.Undo()
End Sub
</script>

Visual C# .NET

<%@ Page Language="C#"%>
<%@ Import Namespace = "System.Web" %>
<%@ Import Namespace = "System.Web.Security" %>
<%@ Import Namespace = "System.Security.Principal" %>
<%@ Import Namespace = "System.Runtime.InteropServices" %>
<script runat=server>
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool RevertToSelf();
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);
public void Page_Load(Object s, EventArgs e)
{
if(impersonateValidUser("username", "domain", "password"))
{
//Insert your code that runs under the security context of a specific user here.
undoImpersonation();
}
else
{
//Your impersonation failed. Therefore, include a fail-safe mechanism here.
}
}
private bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if(RevertToSelf())
{
if(LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if(token!= IntPtr.Zero)
CloseHandle(token);
if(tokenDuplicate!=IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();
}
</script>

Visual J# .NET

<%@ Page language="VJ#" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Security.Principal" %>
<%@ Import Namespace="System.Runtime.InteropServices" %>
<script runat=server>
public static int LOGON32_LOGON_INTERACTIVE = 2;
public static int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
/** @attribute DllImport("advapi32.dll") */
public static native int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
System.IntPtr[] phToken);
/** @attribute DllImport("advapi32.dll",
CharSet=CharSet.Auto, SetLastError=true) */
public static native int DuplicateToken(System.IntPtr hToken,
int impersonationLevel,
System.IntPtr[] hNewToken);
/** @attribute DllImport("kernel32.dll",CharSet=CharSet.Auto) */
public static native boolean CloseHandle(System.IntPtr[] handle);
/** @attribute DllImport("advapi32.dll",
CharSet=CharSet.Auto,SetLastError=true) */
public static native boolean RevertToSelf();
public void Page_Load(Object s, System.EventArgs e)
{
if(impersonateValidUser("username", "domain", " password"))
{
//Insert your code that runs under the security context of a specific user here.
undoImpersonation();
}
else
{
//Your impersonation failed. Therefore, include a fail-safe mechanism here.
}
}
private boolean impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
System.IntPtr[] token = new System.IntPtr[1];
System.IntPtr[] tokenDuplicate = new System.IntPtr[1];
if(RevertToSelf())
{
if(LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, token) != 0)
{
if(DuplicateToken(token[0], 2, tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate[0]);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(tokenDuplicate);
CloseHandle(token);
return true;
}
}
}
}
if(!token[0].Equals(System.IntPtr.Zero))
CloseHandle(token);
if(!tokenDuplicate[0].Equals(System.IntPtr.Zero))
CloseHandle(tokenDuplicate);
return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();
}
</script>


注意:在線程上模擬特定用戶的進程的標識必須具有“作為操作系統的一部分”權限。默認情況下,Aspnet_wp.exe 進程在名為 ASPNET 的計算機帳戶下運行。不過,此帳戶沒有模擬特定用戶所需的權限。如果您嘗試模擬特定用戶,則會出現一條錯誤信息。

要解決此問題,請使用下列方法之一:

為 ASPNET 帳戶授予“作為操作系統的一部分”權限。

在 Machine.config 文件的 <processModel> 配置部分中,將運行 Aspnet_wp.exe 進程所使用的帳戶更改為 System 帳戶。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久日韩精品久久久男男| 精品久久久久久国产91| 欧美日韩一区二区三区在线免费观看| 亚洲性线免费观看视频成熟| 欧美国产精品人人做人人爱| 亚洲第一精品夜夜躁人人躁| 亚洲电影免费观看高清完整版在线| 精品高清美女精品国产区| 亚洲丝袜一区在线| 欧美在线一区二区三区四| 精品自在线视频| 欧美国产一区二区三区| 国产成人极品视频| 欧美在线免费视频| 91欧美精品午夜性色福利在线| 久久精品视频中文字幕| 在线观看久久av| 姬川优奈aav一区二区| 亚洲色在线视频| 国产精品久久久久久久久久ktv| 日韩毛片中文字幕| 日韩国产中文字幕| 高跟丝袜一区二区三区| 亚洲人成网站在线播| 亚洲专区在线视频| 日韩在线免费高清视频| 久久久噜噜噜久久中文字免| 一区二区三区回区在观看免费视频| 高清视频欧美一级| 国产欧美一区二区白浆黑人| 亚洲成人精品在线| 亚洲欧美综合图区| 国产日产欧美a一级在线| 91精品久久久久久久久久另类| 91中文字幕一区| 久久久久在线观看| 欧美午夜视频一区二区| 亚洲欧洲美洲在线综合| 国产欧美最新羞羞视频在线观看| 欧美高清一级大片| 精品国产拍在线观看| 精品国产电影一区| 欧美成人午夜激情视频| 国产成人在线亚洲欧美| 亚洲欧美在线免费观看| 亚洲电影成人av99爱色| 欧美日韩精品中文字幕| 高清视频欧美一级| 日韩亚洲欧美成人| 国产精品wwwwww| 日韩在线观看高清| 亚洲色图15p| 欧美日韩国产中文精品字幕自在自线| 国语自产偷拍精品视频偷| 久久久精品一区二区三区| 久久精品亚洲94久久精品| 亚洲香蕉成人av网站在线观看| 亚洲天堂av高清| 欧美日韩xxxxx| 一区二区在线视频| 91大神在线播放精品| 国产精品久久久av| 日韩在线观看你懂的| 亚洲第一天堂av| 精品国产一区二区三区久久狼5月| 亚洲三级av在线| 91精品国产91久久久久久| 欧美性感美女h网站在线观看免费| 欧美日韩中文字幕| 日韩精品极品视频| 日韩最新中文字幕电影免费看| 亚洲人成在线观看网站高清| 丝袜亚洲另类欧美重口| 日本精品久久久久久久| 久久久97精品| 精品少妇v888av| 亚洲国模精品私拍| 91沈先生在线观看| 97国产suv精品一区二区62| 欧美精品手机在线| 国产一区二区三区毛片| 最新日韩中文字幕| 韩日欧美一区二区| 欧美成人免费播放| 久久中文字幕在线视频| 精品毛片三在线观看| 精品国产一区二区三区四区在线观看| 亚洲欧洲日韩国产| 欧美插天视频在线播放| 亚洲欧美精品在线| 久久国产精品久久国产精品| 亚洲欧洲日韩国产| 最近中文字幕日韩精品| 国产精品久久久久久久app| 精品美女久久久久久免费| 日韩精品日韩在线观看| 亚洲视频在线观看视频| 国产精品久久久999| 日韩av在线播放资源| 亚洲a在线播放| 久久视频在线视频| 欧美激情在线视频二区| 欧美中在线观看| 最好看的2019年中文视频| 亚洲一区中文字幕在线观看| 国产精品久久久久久久久久免费| 国产精品99久久久久久久久久久久| 这里只有精品在线观看| 法国裸体一区二区| 亚洲国产中文字幕在线观看| 在线播放国产一区二区三区| 91精品国产综合久久久久久久久| 久久精品中文字幕| 久久久久久久国产精品| 国产一区二区三区毛片| 91精品国产91久久久久久吃药| 亚州av一区二区| 国产在线视频一区| 国产精品久久av| 久久精品国产清自在天天线| 久久夜色精品国产| 国产视频久久久久久久| 久久成人这里只有精品| 国产亚洲精品一区二555| 久久久久久这里只有精品| 亚洲国产精品美女| 久久久久久国产精品美女| 中文字幕av一区二区三区谷原希美| 亚洲国产欧美一区二区三区同亚洲| 亚洲一区二区免费| 成人福利在线视频| 性欧美长视频免费观看不卡| 91久久精品国产| 久久影院资源网| 国产成人av在线| 欧美大片网站在线观看| 久久久久久久久久婷婷| 成人乱人伦精品视频在线观看| 亚洲一区精品电影| 久久影院资源网| 国产精品久久久久77777| 精品亚洲夜色av98在线观看| 色99之美女主播在线视频| 国产一区二区三区免费视频| 久久视频在线观看免费| 亚洲成人网av| 自拍偷拍亚洲区| 亚洲一区二区中文字幕| 91最新在线免费观看| 国产精品久久久久久av下载红粉| 亚洲欧洲视频在线| 国产亚洲aⅴaaaaaa毛片| 国产午夜精品美女视频明星a级| 97在线视频免费播放| 国产ts一区二区| 亚洲欧美中文在线视频| x99av成人免费| 色综合五月天导航| 97免费视频在线播放| 久久久久国产精品免费| 国产精品丝袜久久久久久高清| 91精品啪在线观看麻豆免费| 国产福利精品av综合导导航| 久久久久久久电影一区|