Ну, что вы подразумеваете под идентификатором пользователя?
Если они прошли проверку подлинности с помощью проверки подлинности Windows, User.Identity предоставляет вам объект WindowsIdentity, соответствующий этому пользователю.
Если вы хотите, чтобы идентификатор пользователя, который соответствует аутентифицированному пользователю, «волшебным образом» отображался на ваших страницах, вы также можете сделать это! В вашем Global.asax есть функция Application_AuthenticateRequest, которую вы реализуете, чтобы получить любую идентификационную информацию, передаваемую вашему приложению, и превратить ее в объект на основе IPrincipal, к которому можно получить доступ с ваших страниц.
Поэтому, когда вы реализуете AuthenticateRequest (), вы можете взять HttpContext.Current.User.Identity.Name и использовать его для поиска своего идентификатора пользователя в вашей базе данных. Оттуда вы создаете свой собственный объект, полученный из IPrincipal, и устанавливаете ссылку HttpContext.Currrent.User на тот объект, который вы создаете. Затем вы можете привести «User» на ваших страницах к объекту, который вы создаете, и прочитать идентификатор пользователя. Мы делаем это все время. Вот пример кода (который на самом деле кэширует объект Principal, чтобы вам не приходилось обращаться к БД при каждом запросе):
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
try {
IIdentity myIdentity = HttpContext.Current.User.Identity;
MyPrincipal myPrincipal = (MyPrincipal)HttpContext.Current.Cache[myIdentity.Name];
if (myPrincipal == null) {
myPrincipal = (MyPrincipal)GetPrincipalFromDatabase(HttpContext.Current.User.Identity);
HttpContext.Current.Cache.Insert(myIdentity.Name, myPrincipal, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);
}
HttpContext.Current.User = myPrincipal;
}
catch (SecurityException) {
HttpContext.Current.User = null;
}
catch (Exception ex) {
Trace.WriteLine("Could not validate your user.");
}
}