Внимание!
Не выбирайте в контекстном меню проекта службы STS ASP.NET команду "Добавить ссылку на службу STS...". Это приведет к перезаписи метаданных службы STS.

В Visual Studio откройте меню "Файл" и выберите "Создать", "Веб-сайт". Выберите пункт "Веб-сайт службы STS ASP.NET".

В файле web.config можно заметить ряд отличий от файла web.config для типичного веб-сайта ASP.NET.

  • В этот файл добавлены указанные ниже параметры приложения.

      Копировать код
    <appSettings> <add key="IssuerName" value="PassiveSigninSTS"/> <add key="SigningCertificateName" value="CN=STSTestCert"/> <add key="EncryptingCertificateName" value=""/> </appSettings>
    
    Для подписания выдаваемых маркеров служба STS использует сертификат по умолчанию. Этот сертификат с именем STSTestCert автоматически добавляется в хранилище сертификатов для использования службой STS. Файл сертификата включается в проект службы STS. Пароль файла — STSTest. Его не следует использовать в производственной среде. Сертификат, используемый по умолчанию, можно заменить любым другим сертификатом. Убедитесь, что пользователь процесса IIS имеет доступ к закрытому ключу любого такого сертификата. Можно также создать тип, производный от IssuerNameRegistry, для выполнения программной проверки сертификатов доверенных поставщиков.

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

      Копировать код
    <location path="FederationMetadata"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
    
  • Элемент <system.Web>/<assemblies> содержит ссылку на сборку Microsoft.IdentityModel.dll:

      Копировать код
    <add assembly="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    
  • Выбор проверки подлинности на основе форм и страницы входа.

      Копировать код
    <authentication mode="Forms"> <forms loginUrl="Login.aspx" protection="All" timeout="30" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" /> </authentication> <!-- Deny Anonymous users. --> <authorization> <deny users="?" /> </authorization>
    
  • Добавлена поддержка трассировки; чтобы ее включить, раскомментируйте соответствующий блок. Дополнительные сведения см. в разделах Трассировка WIF и Инструкции: включение трассировки.

      Копировать код
    <!-- Раскомментируйте следующие строки, чтобы включить трассировку WIF: WIFTrace.e2e. Откройте файл трассировки с помощью средства SvcTraceViewer.exe (входит в состав пакета SDK для WCF корпорации Майкрософт) или средства просмотра XML. Сведения о включении трассировки WCF см. в MSDN. -->
    
      <!--<system.diagnostics> <sources> <source name="Microsoft.IdentityModel" switchValue="Verbose"> <listeners> <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="WIFTrace.e2e" /> </listeners> </source> </sources> <trace autoflush="true" /> </system.diagnostics>-->
    

Откройте файл CustomSecurityTokenService.cs в папке App_Code.

  • Обновите строку static readonly string[] PassiveRedirectBasedClaimsAwareWebApps, включив в нее URL-адреса приложений проверяющей стороны, для которых данная служба STS будет выдавать маркеры.

  • Добавьте в переопределенный метод GetOutputClaimsIdentity утверждения, необходимые приложению проверяющей стороны от службы STS, а также настраиваемые утверждения, которые должна выдавать служба STS.

Ниже перечислены обязательные методы, реализованные в файле CustomSecurityTokenService.cs.

  1. GetScope. Этот метод получает интерфейс IClaimsPrincipal вызывающей стороны и входящий маркер безопасности запроса и возвращает конфигурацию для запроса выдачи маркера, представленную классом Scope. В этом методе можно нормализовать адрес проверяющей стороны и выбрать ключи для подписи и шифрования. Как правило, маркеры безопасности шифруются таким образом, чтобы их могла прочитать только проверяющая сторона.

  2. GetOutputClaimsIdentity. Этот метод получает интерфейс IClaimsPrincipal вызывающей стороны, входящий маркер безопасности запроса и объект Scope, возвращаемый методом GetScope, и возвращает объект IClaimsIdentity, который будет включен в выданный маркер. Это позволяет определить, какие утверждения включены в маркер.