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

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

Поскольку платформа WIF основана на стандартах (WS-*) и поддерживает спецификацию WS-Federation 1.2, она поддерживает и перечисленные выше ключевые аспекты.

На приведенной ниже схеме проиллюстрирован типичный сценарий многоэтапной проверки подлинности, в котором сотрудник Fabrikam.com получает доступ к ресурсам с высокой и низкой ценностью, предоставляемым приложением Contoso.com.

В сценарии участвуют следующие вымышленные пользователи:

  • Владимир: системный администратор компании Fabrikam, сотрудник, пытающийся получить доступ к ресурсам Contoso.

  • Дмитрий: разработчик приложения Contoso, вносящий в него необходимые изменения.

  • Андрей: системный администратор компании Contoso.

Компоненты, задействованные в сценарии:

  • web1: веб-приложение с ресурсами низкой (LowValueResourcePage.aspx) и высокой (HighValueResourcePage.aspx) ценности, в котором для загрузки данных из хранилища на сервере SQL Server используется специальная веб-служба.

  • sts1: служба STS, выполняющая функции поставщика утверждений и выдающая утверждения, которые необходимы приложению (web1).

  • sts2: служба STS, выполняющая функции поставщика удостоверений для Fabrikam.com и предоставляющая две конечные точки: одну для менее надежного метода проверки подлинности, другую — для более надежного. Для этой службы установлено отношение доверия с Contoso.com, чтобы сотрудникам Fabrikam был разрешен доступ к ресурсам Contoso.com.

Как показано на предыдущей диаграмме, в данном сценарии используется следующий поток.

  1. Приложение Contoso настроено на использование необходимых утверждений для предоставления пользователю Fabrikam доступа к защищенным ресурсам высокой и низкой ценности с помощью соответствующих методов проверки подлинности. Дмитрий внес в приложение необходимые изменения.

  2. Пользователь Fabrikam, Владимир, получает доступ к странице приложения Contoso и по умолчанию входит в систему с помощью менее надежного метода проверки подлинности.

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

Основные этапы сценария

Обратите внимание, что данный сценарий носит исключительно иллюстративный характер. Фактические этапы его реализации в производственной среде могут отличаться от описанных.

Настройка поставщика удостоверений

Для администратора Fabrikam.com, Владимира, возможно три варианта действий:

  1. Приобрести и установить службу STS, такую как Службы федерации Active Directory® (AD FS) 2.0.

  2. Подписаться на веб-службу STS, такую как LiveID STS.

  3. Создать пользовательскую службу STS с использованием WIF.

В данном сценарии предполагается, что Владимир выбрал первый вариант и установил в качестве службы STS и поставщика удостоверений службу Службы федерации Active Directory 2.0. Для поддержки обоих методов проверки подлинности (более и менее надежного) Владимир предоставляет в своей службе STS две конечных точки: \windowsauth и \smartcardauth. Изучив документацию к продукту Службы федерации Active Directory 2.0, Владимир устанавливает отношение доверия с доменом Contoso.com.

Настройка поставщика утверждений

Возможные варианты действий Андрея, администратора Contoso.com, не отличаются от описанных выше вариантов для поставщика удостоверений. В данном сценарии предполагается, что Андрей выбирает первый вариант и устанавливает в качестве службы STS проверяющей стороны службу Службы федерации Active Directory 2.0. Изучив документацию к продукту Службы федерации Active Directory 2.0, Андрей устанавливает отношение доверия с доменом Fabrikam.com и самим приложением. Он также настраивает утверждения, необходимые приложению для предоставления доступа к ресурсам высокой и низкой ценности.

Изменения для конкретного приложения

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

Идентификация утверждений, необходимых для ресурсов с высокой и низкой ценностью

Приложение может запросить настраиваемое утверждение или утверждение authenticationmethod, выпущенное платформой по умолчанию. Значение этого утверждения должно использоваться в качестве меры стойкости метода проверки подлинности. В данном сценарии утверждение authenticationmethod помечено как обязательное. Если это утверждение принимает значение "CertorSmartcard", пользователю предоставляется доступ к обоим типам ресурсов (с высокой и низкой ценностью). Если же это утверждение принимает значение "windowsauth", пользователю предоставляется доступ только к ресурсам с низкой ценностью.

Дополнительные сведения об утверждении authenticationmethod и возможных значениях для различных типов маркеров см. в разделе Модель удостоверений на основе утверждений.

Приложение может передать поставщику утверждений сведения о необходимом методе проверки подлинности через параметр wauth, описанный в спецификациях WS-Federation. Кроме того, приложение может делегировать все аспекты проверки подлинности поставщику утверждений и указать в качестве обязательного утверждения собственное утверждение (например утверждение privilegelevel с возможными значениями "lowvalue" и "highvalue").

В данном сценарии используется параметр wauth с двумя возможными настраиваемыми значениями: "authstrength1" для ресурсов с низкой ценностью и "authstrength5" для ресурсов с высокой ценностью.

В приведенном ниже примере кода продемонстрировано использование элемента управления FederatedPassiveSignIn для присвоения значений стойкости проверки подлинности и передачи этих значений поставщику утверждений. Обратите внимание, что параметр AuthenticationType сериализуется "на лету" как параметр WS-Federation wauth.

  Копировать код
<wif:FederatedPassiveSignIn AuthenticationType=https://WIFSample/authstrength1 ID="FederatedPassiveSignIn1" runat="Server" Issuer="https://sts1.contoso.com/AuthPassive/Default.aspx" SignInButtonType="Link" TitleText="Щелкните приведенную ниже ссылку, чтобы получить доступ к ресурсам с низкой ценностью" SignInText="Доступ к ресурсам с низкой ценностью" Realm="https://web1.contoso.com/AuthAssuranceRP/Default.aspx" OnSignInError="FederatedPassiveSignIn_SignInError" DisplayRememberMe="false" VisibleWhenSignedIn="false"> </wif:FederatedPassiveSignIn>

Поставщик утверждений Contoso (sts1) обрабатывает параметр wauth и перенаправляет пользователя на соответствующую конечную точку поставщика удостоверений Fabrikam (sts2).

Установление отношения доверия с поставщиком утверждений с помощью средства FedUtil

Чтобы принимать маркеры, выпущенные поставщиком утверждений, приложение должно установить отношение доверия с поставщиком требований. Установление отношения доверия между приложением проверяющей стороны ASP.NET и службой STS с помощью FedUtil позволяет выполнить эту задачу в два этапа:

  1. Регистрация приложения: FedUtil загружает метаданные федерации из sts1 (служба STS проверяющей стороны) и приложения, выбирает необходимые утверждения и обновляет файл web.config приложения.

  2. Публикация приложения: FedUtil создает метаданные федерации для приложения (файл metadata.xml) и сохраняет их в папке приложения. Эти данные доступны службе STS проверяющей стороны по запросу HTTP GET.

Дополнительные сведения см. в разделе Установление отношения доверия между приложением проверяющей стороны ASP.NET и службой STS с помощью FedUtil.

Реализация в приложении поддержки утверждений и многоэтапной проверки подлинности

Для использования утверждений для многоэтапной проверки подлинности и выполнения других задач, связанных с удостоверениями, приложение должно извлекать утверждения из класса IClaimsPrincipal и проверять наличие обязательного утверждения authenticationmethod.

Подробные сведения о реализации в приложении поддержки утверждений см в подразделе ASP.NET раздела Создание приложений проверяющей стороны.

В приведенном ниже примере кода показано, как на странице ресурса с высокой ценностью выполняется проверка утверждения authenticationmethod, а доступ к странице предоставляется только в том случае, если это утверждение принимает значение "CertOrSmartcard". В данном примере кода также показано, как перенаправить пользователя на страницу входа с многоэтапной проверкой подлинности:

  Копировать код
if ( Page.User.Identity.IsAuthenticated == true ) { if ( GetAuthStrengthClaim() != "CertOrSmartcard" ) { // Проверка подлинности пользователя выполнена с низкой степенью надежности. // Выполнить перенаправление на страницу входа с более надежным методом проверки подлинности. Response.Redirect( "HighAssuranceSignInPage.aspx" ); } // В противном случае пользователь успешно прошел проверку подлинности с высокой степенью надежности. // Разрешить доступ к ресурсам с высокой ценностью. } else { // Проверка подлинности пользователя не выполнена. Перенаправить пользователя на страницу "Default.aspx" Response.Redirect( "Default.aspx" ); }

private string GetAuthStrengthClaim() { IClaimsIdentity claimsIdentity = (IClaimsIdentity)((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0];

// Поиск утверждения проверки подлинности. IEnumerable<Claim> claimCollection = ( from c in claimsIdentity.Claims where c.ClaimType == System.IdentityModel.Claims.ClaimTypes.Authentication select c ); if ( claimCollection.Count<Claim>() > 0 ) { return claimCollection.First<Claim>().Value; }

	return String.Empty; }

На странице HighAssuranceSignInPage.aspx размещен элемент управления FederatedPassiveSignIn с соответствующей конечной точкой поставщика и параметром AuthenticationType:

  Копировать код
<wif:FederatedPassiveSignIn AuthenticationType=https://WIFSample/authstrength5 ID="FederatedPassiveSignIn1" runat="Server" Issuer="https://sts2.fabrikam.com/AuthPassiveSTSCert/Login.aspx" SignInButtonType="Link" SignInButtonStyle-Height="50px" AutoSignIn="false" SignInText="High Assurance Sign-In" TitleText="Щелкните приведенную ниже ссылку, чтобы выполнить проверку подлинности с высокой степенью надежности" Realm="https://web1.contoso.com/AuthAssuranceRP/HighAssuranceSignInPage.aspx" OnSignInError="FederatedPassiveSignIn1_SignInError" VisibleWhenSignedIn="true" DisplayRememberMe="false"> <SignInButtonStyle Height="50px" /> </wif:FederatedPassiveSignIn>

Автоматический переход к новой коллекции утверждений после успешной многоэтапной проверки подлинности

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

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

Модуль WSFederationAuthenticationModule выполняет эту задачу путем обновления маркера безопасности сеанса на основе последних полученных утверждений. Это означает, что когда пользователь изначально входит в систему с помощью проверки подлинности Windows, модуль WSFAM выпускает маркер безопасности сеанса с необходимыми утверждениями; когда пользователь проходит многоэтапную проверку подлинности с помощью сертификата, модуль WSFAM обнаруживает, что пользователь уже прошел проверку подлинности и был выпущен новый маркер, и обновляет маркер безопасности сеанса на основе новой коллекции утверждений.

При новой проверке подлинности модуль WSFAM по умолчанию запишет новый куки-файл, содержащий только новые утверждения. Если приложению проверяющей стороны необходимо, чтобы второй набор утверждений был добавлен к исходному набору, в приложении необходимо обработать событие SessionSecurityTokenCreated, создаваемое элементом управления на странице входа. На этом этапе проверка подлинности пользователя была выполнена с использованием старых утверждений (в Thread.CurrentPrincipal), однако приложение также получило доступ к новым утверждениям в аргументах события, что позволяет объединить оба набора утверждений перед присвоением свойству Thread.CurrentPrincipal нового значения. Все настройки будут сохранены в новом куки-файле.

Примеры ресурсов

В комплект поставки WIF входит обширный список примеров. Поддержка многоэтапной проверки подлинности в WIF показана в примере End-to-end\Authentication Assurance. Обратите внимание, что данный пример подразумевает работу в одной системе с двумя настраиваемыми службами маркеров безопасности поставщика удостоверений и проверяющей стороны.