Я написал небольшое приложение ASP.NET 3.5, чтобы пользователи могли самостоятельно обновлять выбранные атрибуты учетной записи.
Все работает нормально, когда я использую обычную аутентификацию, но из-за того, что диалоговое окно меньшечем в идеале, я хотел бы использовать аутентификацию по формам, чтобы дать пользователям больше инструкций о том, как войти в систему.
Моя проблема в том, что для того, чтобы пользователь мог обновить информацию своей учетной записи, мне нужно иметь приложениевыдавать себя за них за действия по обновлению.
Я искал в интернете, пытаясь найти решение моей проблемы, но ничего не подходит или не работает.Я попытался установить web.config :
<identity impersonate="true">
, но, похоже, это не работает.У меня также есть код C #, использующий класс WindowsImpersonationContext , но все же не повезло.
protected void titleTextBox_TextChanged(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
string fieldTitle = "job title";
string fieldName = "title";
if (userDirectoryEntry == null)
CaptureUserIdentity();
try
{
WindowsImpersonationContext impersonationContext = userWindowsIdentity.Impersonate();
if (String.IsNullOrEmpty(tb.Text))
userDirectoryEntry.Properties[fieldName].Clear();
else
userDirectoryEntry.InvokeSet(fieldName, tb.Text);
userDirectoryEntry.CommitChanges();
impersonationContext.Undo();
PostBackMessages.Add(fieldTitle, "");
}
catch (Exception E)
{
PostBackMessages.Add(fieldTitle, E.Message);
}
}
Я также попытался использовать метод LogonUser для создания токена пользователя ибэкэнд аутентификации таким образом, и он тоже не работает.
IntPtr token = IntPtr.Zero;
bool result = LogonUser(userName, domainName, passwordTB.Text, LogonSessionType.Network, LogonProvider.Default, out token);
if (result)
{
WindowsPrincipal wp = new WindowsPrincipal(new WindowsIdentity(token));
System.Threading.Thread.CurrentPrincipal = wp;
HttpContext.Current.User = wp;
if (Request.QueryString["ReturnUrl"] != null)
{
FormsAuthentication.RedirectFromLoginPage(usernameTB.Text, false);
}
else
{
FormsAuthentication.SetAuthCookie(usernameTB.Text, false);
}
}
Я просто не могу не думать, что мне не хватает чего-то невероятно простого ...