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

Что такое GenericIdentity?

Может кто-нибудь кратко объяснить, что такое использование GenericIdentity и где его использовать.

4b9b3361

Ответ 1

GenericIdentity и GenericPrincipal - самый простой способ описания пользователя как "принципала". Это можно использовать для проверки безопасности без проверки безопасности в приложении - то есть, если пользователь входит в систему как "Fred" с разрешениями "Пользователь" и "Администратор":

    string[] roles = { "User", "Admin" };
    Thread.CurrentPrincipal = new GenericPrincipal(
        new GenericIdentity("Fred"), roles);

Вы можете сделать это в точке входа клиента в winform, или есть определенные пункты для этого в WCF, ASP.NET и т.д.

Затем более поздний код, не зная, как обрабатываются эти разрешения, может проверить это разрешение - либо через IsInRole, либо декларативно:

[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
void SomeAdminFunction() { }

Некоторый полезный код полезности здесь - это нуль-безопасные обертки вокруг принципала/идентичности:

public static string GetUsername() {
    IPrincipal principal = Thread.CurrentPrincipal;
    IIdentity identity = principal == null ? null : principal.Identity;
    return identity == null ? null : identity.Name;
}
public static bool IsInRole(string role) {
    IPrincipal principal = Thread.CurrentPrincipal;
    return principal == null ? false : principal.IsInRole(role);
}

Тогда у вас может быть код аудита в вашем DAL:

row.UpdatedBy = MyUtilityClass.GetUsername();

GenericPrincipal полезен для простых случаев простого имени пользователя и множества известных ролей. Более сложные основные реализации могут, например, выполнять проверку доступа "по требованию", то есть до тех пор, пока вы не спросите о роли "Foo", которую она не знает, - тогда она обнаруживает (путем общения с веб-службой, базой данных, каталог и т.д.) и кэширует результат для будущего доступа. Это полезно, когда список потенциальных ролей является большим, а количество ролей, обычно запрашиваемых в реальности, невелико.

Вы также можете использовать принципала для хранения дополнительной информации об идентификаторе, которая требуется только в определенных контекстах - например, токен безопасности. Вызывающие могут проверить принципала с помощью as, чтобы узнать, поддерживает ли он дополнительные данные.

Использование "принципала" полезно, потому что ваш код логической обработки может говорить об идентичности, не зная, являются ли это winforms, ASP.NET, WCF, службой Windows и т.д. - абстрактно. Кроме того, некоторые сторонние коды также поговорят с директором.

В качестве другого примера я написал несколько примеров здесь, в котором показано, как использовать принципала для управления доступом к элементам управления winform через конструктор (через a IExtenderProvider - который добавляет дополнительные записи в сетку свойств в VS).

Ответ 2

Вы можете использовать GenericIdentity как конкретную реализацию Identity, где вы хотите программно представить информацию о текущем пользователе. Довольно хорошо, если вы сами идентифицировали и аутентифицировали пользователя, используя другие каналы.

Ответ 4

Общий класс: -  Класс GenericIdentity реализует интерфейс IIdentity. Он представляет собой идентификатор пользователя на основе пользовательского метода проверки подлинности, определенного приложением. Класс GenericPrincipal: - Класс GenericPrincipal реализует интерфейс IPrincipal. Он представляет собой пользователей и роли, которые существуют независимо от пользователей Windows и их ролей. По сути, общий принцип является простым решением для аутентификации и авторизации приложений.