ClaimsPrincipal.Current vs. HttpContext.Current.User?
В MVC какая разница между этими 2?
Они выглядят одинаково, и они даже возвращают тот же тип / класс System.Web.Security.RolePrincipal
но есть тонкости.
Например. Следующий код выдает различные ошибки при вызове экземпляра, созданного с помощью ClaimsPrincipal.Current.
cp.FindFirst(ClaimTypes.Name); //{"Unable to connect to SQL Server database."} <--HUH!?
cp.Claims; //{"Value cannot be null.\r\nParameter name: username"}
Выше работает, когда это вместо cp:
var cp = System.Web.HttpContext.Current.User
При быстром просмотре подробностей для частных пользователей я вижу, что у них обоих есть один и тот же словарь претензий. Однако по какой-либо причине публичная собственность дует при вызове объекта, возвращенного ClaimsPrincipal.Current
Помощь - почему это? Это сводит меня с ума.
============= EDIT ==================
Должно быть, почти пора идти спать.
IPrincipal поддерживает несколько идентификаторов. Требуется какой-то магазин. IIdentity возвращает экземпляр ClaimsIdentity и не требует хранилища.
Я просто сверлял неправильные свойства. Два из них почти идентичны по своей форме, т.е. те же свойства и методы, что я их запутал.
1 ответ
Идентификацией является текущий аутентифицированный пользователь, а основным - контекст безопасности, в котором выполняется код.
Эта статья является хорошим объяснением, которое я нашел полезным http://msdn.microsoft.com/en-us/library/ftx85f8x.aspx.