当前位置: 首页 > 编程语言 > C#

如何使用另一个身份在asp.net中执行我的代码,前提是我有要共享的用户名和密码

时间:2023-04-10 11:11:31 C#

如何使用另一个身份在asp.net中执行我的代码,前提是我有一个用户名和password我正在构建一个基于Web的小型管理应用程序。在其中我需要通过wmi连接到具有不同帐户的不同服务器。我想要的是告诉我的应用程序:你现在由user1运行,执行此操作。然后我想告诉它:现在你是user2,做这个做这个。我想,我的问题不是很清楚,我会重构它。您必须编写一段单独的.Net代码(一些非托管调用)来执行您的用户模拟,然后在模拟该用户时调用您的代码。然后您可以恢复用户帐户:对于VB示例表示歉意,但这很容易移植到C#。以上就是C#学习教程:如何在asp.net中使用另一个身份执行我的代码,前提是我有用户名和密码分享所有内容,如果对大家有用需要进一步了解C#学习教程,希望大家多多关注—VB实例PublicClassUserImpersonationPrivateDeclareAutoFunctionLogonUserLib"advapi32.dll"(ByVallpszUsernameAs[String],_ByVallpszDomainAs[String],ByVallpszPasswordAs[String],_ByValdwLogonTypeAsInteger,ByValdwLogonProviderAsInteger,_ByRefphTokenAsIntPtr)AsBoolean_PrivateSharedFunctionFormatMessage(ByValdwFlagsAsInteger,ByReflpSourceAsIntPtr,_ByValdwMessageIdAsInteger,ByValdwLanguageIdAsInteger,ByRef[ValagedAsLanguageInteger,ByRef]nSizeAsInteger,ByRefArgumentsAsIntPtr)AsIntegerEndFunctionPrivateDeclareAutoFunctionCloseHandleLib"kernel32.dll"(ByValhandleAsIntPtr)AsBoolean私有声明自动函数DuplicateTokenLib"Intadvapi32.dll"(ByValExisting)TokenByValSECURITY_IMPERSONATION_LEVEL作为整数,_ByRefDuplicateTokenHandle作为IntPtr)作为布尔值_PublicSharedFunctionImpersonateUser(ByValstrDomainAsString,ByValstrUseridAsString,ByValstrPasswordAsString)AsWindowsImpersonationContextDimtokenHandleAsNewIntPtr(0)DimdupeTokenHandleAsNewIntPtr(0)Try'获取指定用户、域的用户令牌,和密码使用'非托管LogonUser方法。'本地机器名可以用作域名来模拟这台机器上的用户。ConstLOGON32_PROVIDER_DEFAULTAsInteger=0'此参数导致LogonUser创建主令牌。ConstLOGON32_LOGON_INTERACTIVEAsInteger=2tokenHandle=IntPtr.Zero'调用LogonUser以获得访问令牌的句柄。DimreturnValueAsBoolean=LogonUser(strUserid,strDomain,strPassword,LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,tokenHandle)如果returnValue=FalseThenDimretAsInteger=Marshal.GetLastWin32Error()ThrowNewSystem.ComponentModel.Win32Exception(ret)Else'使用令牌句柄e由LogonUser返回。DimnewIdAsNewWindowsIdentity(tokenHandle)DimImpersonatedUserAsWindowsImpersonationContext=newId.Impersonate()ReturnImpersonatedUserEndIfCatchexAsExceptionConsole.WriteLine("UserImpersonation.impersonateUserExceptionOccurred:"+Reex.EndTry'释放令牌。如果NotSystem.IntPtr.op_Equality(tokenHandle,IntPtr.Zero)ThenCloseHandle(tokenHandle)EndIfEndFunctionPublicSharedFunctionUndoImpersonate(ByValWICAsWindowsImpersonationContext)AsBooleanTry'停止用户模拟.Undo()ReturnTrueCatchexAsExceptionConsole.WriteLine(("Exceptionoccurred."+ex.Message))ReturnFalseEndTryEndFunctionEndClass如管理员删除,如有转载请注明出处: