Chr*_*yes 4 c# asp.net iis impersonation
我想使用客户端用户的凭据访问数据库。
Task.Run(() =>
{
// Connect to DB.
}
Run Code Online (Sandbox Code Playgroud)
<identity impersonate="true" />
Run Code Online (Sandbox Code Playgroud)
<validation validateIntegratedModeConfiguration="false" />
Run Code Online (Sandbox Code Playgroud)
<authentication mode="Windows" />
Run Code Online (Sandbox Code Playgroud)
我对这种工作方式不知所措,或者完全误解了。
根据您的评论,您似乎正在运行System.Security.Principal.WindowsIdentity.GetCurrent().Name一个Task,并且正在获取App Pool的身份,而不是模拟用户的身份。这是一个常见的问题(看看我前一段时间问过的这个问题)。
但是,有一种解决方法。如果仍然希望您的任务以模拟用户身份运行,则必须在任务运行之前保存当前用户的令牌,然后尝试“重新模拟”任务的上下文,如下所示:
IntPtr currentUser = WindowsIdentity.GetCurrent().Token; // This token points to the impersonated user
Task.Run(() =>
{
using (WindowsIdentity.Impersonate(token))
{
// Connect to DB.
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以确保Using块中的所有内容都以模拟用户的身份运行。