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.

Другие вопросы по тегам