Подтвердить что ты не робот

Что действительно является основным в .NET?

Говоря об идентичности в .NET, мы имеем идею Principal. Там интерфейс IPrincipal и вместе с ним реализуется ClaimsPrincipal. Мы можем даже получить доступ к одному экземпляру реализации этого интерфейса в любое время, используя Thread.CurrentPrincipal.

Теперь я никогда не понимал, что это за главный принцип. Действительно, сначала я подумал, что это то, что представляет собой личность текущего пользователя. Но это не так, на самом деле есть другой интерфейс IIdentity вместе с реализацией ClaimsIdentity. Несколько раз я обнаружил следующее в MSDN:

Основной объект представляет контекст безопасности пользователя, от имени которого работает код, включая идентификатор пользователя (IIdentity) и любые роли, к которым они принадлежат.

Но какой именно контекст безопасности пользователя, от имени которого работает код, действительно означает? Я думаю, что я еще не понял, что это должно представлять.

4b9b3361

Ответ 1

При авторизации доступа к ресурсу или возможности запуска какого-либо кода недостаточно просто узнать, какой пользователь разрешает действие, но под какую роль он разрешает его.

Подумайте об этом, поскольку это примерно эквивалентно тому, когда вы поднимаете оболочку: оболочка теперь работает под другим принципом (с более привилегиями), хотя идентификатор принципала все тот же (ваша учетная запись пользователя).

Тип IIdentity ориентирован на проблемы аутентификации, то есть устанавливает, что идентификация, известная системе, фактически принадлежит агенту, который хочет действовать под этим идентификатором. Это необходимое условие для авторизации чего-либо, но это не вся история.

Ответ 2

Принципал - это абстрактная вещь, которая инкапсулирует личность и роль, и, таким образом, это контекст безопасности, в котором выполняется код. Это может быть идентификатор Windows (т.е. учетная запись пользователя Windows или Active Directory) и "роль" Windows, или "группа", или это может быть идентификатор/роль, которая не зависит от пользователей и ролей Windows, но все еще доступна для нескольких пользователей. Приложения. В-третьих, это также может быть индивидуальное представление личности и роли, которое определяется исключительно в вашем приложении.

Контекст безопасности не является статичным; его можно изменить, изменив основную роль и, следовательно, предоставив большие или меньшие привилегии удостоверению (пользователю) и приложению, работающему в контексте безопасности.

Вот хорошее место для начала, чтобы узнать больше об этом: https://msdn.microsoft.com/en-us/library/z164t8hs.aspx

Ответ 3

В описании сказано, что основной является личность плюс роли.

На самом деле это нечто простое, как

public interface IPrincipal 
{
    IIdentity Identity { get; }
    bool IsInRole( string role );
}

Идея абстрагирования этого была очень важна. Хотя изначально было только несколько реализаций (включая WindowsPrincipal, RolePrincipal и GenericPrincipal), позже были введены другие реализаторы (например, ClaimsPrincipal). И большая часть устаревшего кода может быть легко обновлена ​​до новых реализаций, со всеми преимуществами, но без изменения чего-либо еще.