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

В файле 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" />
    
  • Тип проверки подлинности изменен с "Windows" на "None" (отсутствует):

      Копировать код
    <authentication mode="None">
    
  • Добавлены служба проверки подлинности, служба профилей и служба ролей:

      Копировать код
    <system.web.extensions> <scripting> <webServices> <!-- Раскомментируйте этот раздел, чтобы включить службу проверки подлинности. Если необходимо, включите строку requireSSL="true". <authenticationService enabled="true" requireSSL = "true|false"/> --> <!-- Раскомментируйте эти строки, чтобы включить службу профилей и выбрать свойства профиля, которые можно загружать и изменять в AJAX-приложениях ASP.NET. <profileService enabled="true" readAccessProperties="propertyname1,propertyname2" writeAccessProperties="propertyname1,propertyname2" /> --> <!-- Раскомментируйте этот раздел, чтобы включить службу ролей. <roleService enabled="true"/> --> </webServices> <!-- <scriptResourceHandler enableCompression="true" enableCaching="true" /> --> </scripting> </system.web.extensions>
    
  • Добавлены следующие службы, конечные точки, привязки и реакций на события:

      Копировать код
    <system.serviceModel> <services> <service name="Microsoft.IdentityModel.Protocols.WSTrust.WSTrustServiceContract" behaviorConfiguration="ServiceBehavior"> <endpoint address="IWSTrust13" binding="ws2007HttpBinding" contract="Microsoft.IdentityModel.Protocols.WSTrust.IWSTrust13SyncContract" bindingConfiguration="ws2007HttpBindingConfiguration"/> <host> <baseAddresses> <add baseAddress="http://localhost/STSService1/Service.svc" /> </baseAddresses> </host> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> </service> </services> <bindings> <ws2007HttpBinding> <binding name="ws2007HttpBindingConfiguration"> <security mode="Message"> <message establishSecurityContext="false" /> </security> </binding> </ws2007HttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <!-- Чтобы избежать раскрытия сведений о метаданных, перед развертыванием присвойте указанному ниже параметру значение false и удалите приведенную выше конечную точку метаданных --> <serviceMetadata httpGetEnabled="true" /> <!-- Чтобы получать сведения об исключениях при сбоях во время отладки, присвойте следующему параметру значение true.  Чтобы избежать раскрытия сведений об исключениях, перед развертыванием присвойте указанному ниже параметру значение false --> <serviceDebug includeExceptionDetailInFaults="false" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel>
    
  • Добавлена поддержка трассировки; чтобы ее включить, раскомментируйте соответствующий блок. Дополнительные сведения см. в разделах Трассировка 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[] ActiveClaimsAwareApps, включив в нее URL-адреса приложений проверяющей стороны, для которых данная служба STS будет выпускать маркеры.

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

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

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

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