Служба STS WCF
В 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="https://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.
GetScope. Этот метод получает интерфейс IClaimsPrincipal вызывающей стороны и входящий маркер безопасности запроса и возвращает конфигурацию для запроса выдачи маркера, представленную классом Scope. В этом методе можно нормализовать адрес проверяющей стороны и выбрать ключи для подписи и шифрования. Как правило, маркеры безопасности шифруются таким образом, чтобы их могла прочитать только проверяющая сторона.
GetOutputClaimsIdentity. Этот метод получает интерфейс IClaimsPrincipal вызывающей стороны, входящий маркер безопасности запроса и объект Scope, возвращаемый методом GetScope, и возвращает объект IClaimsIdentity, который будет включен в выданный маркер. Это позволяет определить, какие утверждения включены в маркер.