ClaimsPrincipal Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Реализация, поддерживающая IPrincipal несколько удостоверений на основе утверждений.
public ref class ClaimsPrincipal : System::Security::Principal::IPrincipal
public class ClaimsPrincipal : System.Security.Principal.IPrincipal
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ClaimsPrincipal : System.Security.Principal.IPrincipal
type ClaimsPrincipal = class
interface IPrincipal
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Serializable>]
type ClaimsPrincipal = class
interface IPrincipal
Public Class ClaimsPrincipal
Implements IPrincipal
- Наследование
-
ClaimsPrincipal
- Производный
- Атрибуты
- Реализации
Примеры
В следующем примере извлекаются утверждения, представленные пользователем в HTTP-запросе, и записывает их в ответ HTTP. Текущий пользователь считывается в HttpContext виде ClaimsPrincipal. Затем утверждения считываются из него, а затем записываются в ответ.
if (HttpContext.Current.User is ClaimsPrincipal principal)
{
foreach (Claim claim in principal.Claims)
{
Response.Write("CLAIM TYPE: " + claim.Type + "; CLAIM VALUE: " + claim.Value + "</br>");
}
}
Комментарии
Начиная с .NET Framework 4.5, Windows Identity Foundation (WIF) и удостоверений на основе утверждений полностью интегрированы в .NET Framework. Это означает, что многие классы, представляющие субъект в .NET Framework, теперь являются производными от ClaimsPrincipal не простого IPrincipal реализации интерфейса. Помимо реализации IPrincipal интерфейса, ClaimsPrincipal предоставляет свойства и методы, которые полезны для работы с утверждениями.
ClaimsPrincipal предоставляет коллекцию удостоверений, каждая из которых является ClaimsIdentity. В обычном случае эта коллекция, доступ к которой осуществляется через Identities свойство, будет иметь только один элемент.
Введение ClaimsPrincipal в .NET 4.5 в качестве субъекта, от которого наследуется большинство основных классов, не заставляет вас изменять что-либо таким образом, в котором вы работаете с удостоверением. Однако он открывает больше возможностей и предлагает больше шансов на более точное управление доступом. Рассмотрим пример.
Сам код приложения может работать непосредственно с утверждениями, содержащимися в текущем субъекте, для выполнения дополнительных задач проверки подлинности, авторизации и персонализации.
Вы можете перенаправить ресурсы с конвейером обработки утверждений, который может работать с запросами проверки подлинности и политикой авторизации даже до достижения выполнения кода. Например, можно настроить веб-приложение или службу с помощью пользовательского диспетчера проверки подлинности утверждений, экземпляр класса, наследуемого ClaimsAuthenticationManager от класса. При настройке конвейер обработки запросов вызывает Authenticate метод в диспетчере проверки подлинности утверждений, передавая его, ClaimsPrincipal который представляет контекст входящего запроса. Затем диспетчер проверки подлинности утверждений может выполнять проверку подлинности на основе значений входящих утверждений. Он также может фильтровать, преобразовывать или добавлять утверждения в входящий набор утверждений. Например, его можно использовать для обогащения входящего набора утверждений новыми утверждениями, созданными из локального источника данных, например профиля локального пользователя.
Вы можете настроить веб-приложение с помощью пользовательского диспетчера авторизации утверждений, экземпляр класса, наследуемого ClaimsAuthorizationManager от класса. При настройке конвейер обработки запросов упаковывает входящий ClaimsPrincipal и AuthorizationContext вызывает CheckAccess метод в диспетчере авторизации утверждений. Затем диспетчер авторизации утверждений может применить авторизацию на основе входящих утверждений.
Встроенные проверки доступа к коду на основе утверждений можно выполнить, настроив приложение с помощью пользовательского диспетчера авторизации утверждений и используя ClaimsPrincipalPermission класс для выполнения императивных проверок доступа или ClaimsPrincipalPermissionAttribute выполнения декларативных проверок доступа. Проверки доступа к коду на основе утверждений выполняются встроенными, вне конвейера обработки и поэтому доступны для всех приложений до настройки диспетчера авторизации утверждений.
Вы можете получить ClaimsPrincipal экземпляр субъекта, связанного с запросом, или субъект, в котором выполняется поток, в приложении проверяющей стороны (RP), присвоив свойству ClaimsPrincipalзначение Thread.CurrentPrincipal . Утверждения, ClaimsPrincipal связанные с объектом, доступны через его Claims свойство. Свойство Claims возвращает все утверждения, содержащиеся удостоверениями, связанными с субъектом. В редких случаях, когда ClaimsPrincipal содержит несколько ClaimsIdentity экземпляров, можно использовать Identities свойство или получить доступ к основному удостоверению с помощью Identity свойства. ClaimsPrincipal предоставляет несколько методов, с помощью которых эти утверждения могут выполняться поиск и полностью поддерживают языковой интегрированный запрос (LINQ). Удостоверения можно добавить в субъект с помощью AddIdentities методов или AddIdentity методов.
Замечание
Чтобы добавить удостоверения в объект, вызывающий ClaimsPrincipalобъект должен иметь полное доверие.
По умолчанию WIF определяет приоритеты WindowsIdentity объектов при выборе основного удостоверения для возврата через Identity свойство. Это поведение можно изменить, предоставив делегату через PrimaryIdentitySelector свойство для выполнения выбора. Свойство ClaimsPrincipalSelector предоставляет аналогичные функциональные возможности для Current свойства.
В модели на основе утверждений, определяется ли субъект в указанной роли утверждениями, представленными его базовыми удостоверениями. Метод IsInRole по сути проверяет каждое удостоверение, связанное с субъектом, чтобы определить, имеет ли он утверждение с указанным значением роли. Тип утверждения (представленного его Claim.Type свойством), используемый для определения утверждений, которые следует проверять во время проверки ролей, указывается для удостоверения через его ClaimsIdentity.RoleClaimType свойство. Таким образом, утверждения, рассмотренные во время проверки ролей, могут иметь другой тип для различных удостоверений, связанных с субъектом.
Конструкторы
| Имя | Описание |
|---|---|
| ClaimsPrincipal() |
Инициализирует новый экземпляр класса ClaimsPrincipal. |
| ClaimsPrincipal(BinaryReader) |
Инициализирует экземпляр указанного ClaimsPrincipalBinaryReaderобъекта. |
| ClaimsPrincipal(IEnumerable<ClaimsIdentity>) |
Инициализирует новый экземпляр ClaimsPrincipal класса с помощью указанных удостоверений утверждений. |
| ClaimsPrincipal(IIdentity) |
Инициализирует новый экземпляр класса из указанного ClaimsPrincipal удостоверения. |
| ClaimsPrincipal(IPrincipal) |
Инициализирует новый экземпляр класса из указанного ClaimsPrincipal субъекта. |
| ClaimsPrincipal(SerializationInfo, StreamingContext) |
Устаревшие..
Инициализирует новый экземпляр класса из сериализованного потока, созданного ClaimsPrincipal с помощью ISerializable. |
Свойства
| Имя | Описание |
|---|---|
| Claims |
Возвращает коллекцию, содержащую все утверждения из всех удостоверений утверждений, связанных с этим субъектом утверждений. |
| ClaimsPrincipalSelector |
Возвращает или задает делегат, используемый для выбора субъекта утверждений, возвращаемого свойством Current . |
| Current |
Возвращает текущий субъект утверждений. |
| CustomSerializationData |
Содержит дополнительные данные, предоставляемые производным типом. Обычно устанавливается при вызове WriteTo(BinaryWriter, Byte[]). |
| Identities |
Возвращает коллекцию, содержащую все удостоверения утверждений, связанные с этим субъектом утверждений. |
| Identity |
Возвращает удостоверение основных утверждений, связанное с этим субъектом утверждений. |
| PrimaryIdentitySelector |
Возвращает или задает делегат, используемый для выбора удостоверения утверждений, возвращаемого свойством Identity . |
Методы
| Имя | Описание |
|---|---|
| AddIdentities(IEnumerable<ClaimsIdentity>) |
Добавляет указанные удостоверения утверждений в этот субъект утверждений. |
| AddIdentity(ClaimsIdentity) |
Добавляет указанное удостоверение утверждений в этот субъект утверждений. |
| Clone() |
Возвращает копию этого экземпляра. |
| CreateClaimsIdentity(BinaryReader) |
Создает новое удостоверение утверждений. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| FindAll(Predicate<Claim>) |
Извлекает все утверждения, которые соответствуют указанному предикату. |
| FindAll(String) |
Извлекает все утверждения или утверждения, имеющие указанный тип утверждения. |
| FindFirst(Predicate<Claim>) |
Извлекает первое утверждение, соответствующее указанному предикату. |
| FindFirst(String) |
Извлекает первое утверждение с указанным типом утверждения. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
Заполняет данные, необходимые SerializationInfo для сериализации текущего ClaimsPrincipal объекта. |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| HasClaim(Predicate<Claim>) |
Определяет, содержит ли любой из удостоверений утверждений, связанных с этим субъектом утверждений, утверждение, соответствующее указанному предикату. |
| HasClaim(String, String) |
Определяет, содержит ли любой из удостоверений утверждений, связанных с этим субъектом утверждений, утверждение с указанным типом и значением. |
| IsInRole(String) |
Возвращает значение, указывающее, находится ли сущность (пользователь), представленная этим субъектом утверждений, в указанной роли. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| WriteTo(BinaryWriter, Byte[]) |
Сериализуется с помощью .BinaryWriter |
| WriteTo(BinaryWriter) |
Сериализуется с помощью .BinaryWriter |