IIdentity и IPrincipal

Разработчики ASP.NET и Служба WCF (Windows Communication Foundation) обычно используют интерфейсы IIdentity и IPrincipal для работы с идентификационным данным пользователя. В WIF эти интерфейсы расширены, как показано на следующей схеме.

Разработчики могут обращаться к имени пользователя, как и раньше. Они также могут обращаться к другим утверждениям для пользователя, таким как адрес электронной почты, возраст, почтовый адрес и т. д.

WIF предоставляет эти возможности с помощью существующих методов, таких как Thread.CurrentPrincipal. Нужно вызвать Thread.CurrentPrincipal и привести возвращенный интерфейс IPrincipal к IClaimsPrincipal. Как показано на предыдущей схеме, IClaimsPrincipal предоставляет набор удостоверений, каждый из которых содержит коллекцию утверждений о субъекте, которым обычно является текущий пользователь.

Утверждение представлено классом Claim. Этот класс имеет следующие важные свойства.

  • ClaimType представляет тип утверждения и обычно является кодом URI. Например, адрес электронной почты представляется как http://schemas.microsoft.com/ws/2008/06/identity/claims/email.

  • Value содержит значение утверждения и представлен в виде строки. Например, адрес электронной почты может представляться как "someone@contoso.com".

  • ValueType представляет тип значения утверждения и обычно является кодом URI. Например, адрес строковый тип представляется как http://www.w3.org/2001/XMLSchema#string.

  • Типом значения должен быть QName в соответствии с XML-схемой. Значение должно иметь формат namespace#format, чтобы служба WIF могла выдавать допустимое значение QName.

  • Если пространство имен не является правильно определенным, созданный XML-код, возможно, не удастся проверить относительно схемы, потому что для этого пространства имен не будет опубликованного XSD-файла.

  • Тип значения по умолчанию — http://www.w3.org/2001/XMLSchema#string.

  • Известные типы значений, которые можно безопасно использовать, см. по адресу http://www.w3.org/2001/XMLSchema.

  • Issuer представляет собой идентификатор службы STS, которая выпустила утверждение. Он может выражаться в виде URL-адреса службы или имени, которое представляет службу, например https://sts1.contoso.com/sts. Дополнительные сведения см. в разделе IssuerNameRegistry.

  • OriginalIssuer представляет собой идентификатор службы STS, которая изначально выпустила утверждение, независимо от количества служб маркеров безопасности в цепочке. Он представляется в виде Issuer.

  • Subject представляет собой субъект, удостоверение которого проверяется. Он содержит IClaimsIdentity.

  • Properties — это словарь, который позволяет разработчику предоставлять данные приложения для передачи вместе с другими свойствами и который может использоваться для пользовательской проверки.

Делегирование удостоверений

Важным свойством IClaimsIdentity является Actor. Это свойство позволяет выполнять делегирование удостоверений в многоуровневой системе, в которой средний уровень выступает в роли клиента, выполняющего запросы к серверной службе. Дополнительные сведения см. в разделе Сценарий делегирования удостоверения.