Я написал небольшое приложение ASP.NET 3.5, чтобы пользователи могли самостоятельно обновлять выбранные атрибуты аккаунта.Пользовательское олицетворение аутентификации форм asp.net
Все отлично работает, когда я использую обычную проверку подлинности, а потому, что диалог, который представлен меньше, чем идеал, я хотел бы использовать формы аутентификации, чтобы дать пользователям больше инструкции о том, как войти в систему.
Моя проблема заключается в том, что для того, чтобы пользователь мог обновить свою учетную информацию, мне нужно, чтобы приложение выдавало себя за действия обновления.
Я искал интернет, пытаясь найти решение моей проблемы, но ничего не подходит или не работает. Я попытался установить 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);
}
}
Я просто не могу не думать, что я что-то невероятно просто не хватает ...
Для проверки подлинности форм я должен включить анонимную аутентификацию. Я не могу использовать проверку подлинности Windows из-за проблем с делегацией при попытке напрямую выдавать себя за помощью через IIS, а базовая аутентификация (хотя она работает) неудобна и не удобна для пользователя. – user437050