Может кто-нибудь кратко объяснить, что такое использование GenericIdentity и где его использовать.
Что такое GenericIdentity?
Ответ 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, где вы хотите программно представить информацию о текущем пользователе. Довольно хорошо, если вы сами идентифицировали и аутентифицировали пользователя, используя другие каналы.
Ответ 3
Отъезд
http://msdn.microsoft.com/en-us/library/system.security.principal.genericidentity.aspx
Здесь вы найдете несколько примеров. Он представляет общий пользователь.
Аутентификация и профили.
Ответ 4
Общий класс: - Класс GenericIdentity реализует интерфейс IIdentity. Он представляет собой идентификатор пользователя на основе пользовательского метода проверки подлинности, определенного приложением. Класс GenericPrincipal: - Класс GenericPrincipal реализует интерфейс IPrincipal. Он представляет собой пользователей и роли, которые существуют независимо от пользователей Windows и их ролей. По сути, общий принцип является простым решением для аутентификации и авторизации приложений.