Как получить пользовательские данные из общего принципала внутри кода aspx?
Я создаю приложение и интегрирую его с активным каталогом.
Таким образом, я аутентифицирую своего пользователя приложения для пользователей активного каталога, после чего я сохраняю некоторые данные пользователя, такие как: user group and user profile
к основному принципу и идентификатору пользователя к универсальному идентификатору.
Моя проблема в том, что я не могу получить данные профиля пользователя из общего принципала, когда я хочу их использовать.
Может кто-нибудь показать мне, как это сделать?
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if (authCookie == null)
{
//There is no authentication cookie.
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch (Exception ex)
{
//Write the exception to the Event Log.
return;
}
if (authTicket == null)
{
//Cookie failed to decrypt.
return;
}
String data = authTicket.UserData.Substring(0, authTicket.UserData.Length -1);
string[] userProfileData = data.Split(new char[] { '|' });
//Create an Identity.
GenericIdentity id =
new GenericIdentity(authTicket.Name, "LdapAuthentication");
//This principal flows throughout the request.
GenericPrincipal principal = new GenericPrincipal(id, userProfileData);
Context.User = principal;
Примечание. Код выше находится в глобальном файле asax, и я хочу использовать данные профиля пользователя, которые я сохранил в общем файле в другом файле с именем default.aspx
,
2 ответа
Итак, во-первых, вы не должны делать это:
GenericPrincipal principal = new GenericPrincipal(id, userProfileData);
//^^ this is wrong!!
Второй аргумент конструктора - для ролей. Смотрите документы.
Если вы хотите сохранить данные в общий принципал, то вам следует сделать следующее:
Создать класс из
GenericIdentity
:class MyCustomIdentity : GenericIdentity { public string[] UserData { get; set;} public MyCustomIdentity(string a, string b) : base(a,b) { } }
Создайте это так:
MyCustomIdentity = new MyCustomIdentity(authTicket.Name,"LdapAuthentication"); //fill the roles correctly. GenericPrincipal principal = new GenericPrincipal(id, new string[] {});
Получите это на странице как это:
Класс Page имеет свойство User.
Так, например, при загрузке страницы вы можете сделать это:
protected void Page_Load(object sender, EventArgs e) { MyCustomIdentity id = (MyCustomIdentity)this.User.Identity var iWantUserData = id.UserData; }
Вы также можете использовать следующий код:
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
string userData = id.Ticket.UserData