Как настроить учетные данные федеративной службы

В Windows Communication Foundation (WCF) создание федеративной службы состоит из следующих основных процедур:

  1. Настройка WSFederationHttpBinding или аналогичной пользовательской привязки. Дополнительные сведения о создании соответствующей привязки см. в статье "Практическое руководство. Создание WSFederationHttpBinding".

  2. Настройка объекта IssuedTokenServiceCredential, который определяет процесс аутентификации выданных токенов, которые представляются службе.

В этом разделе описывается второй этап. Дополнительные сведения о том, как работает федеративная служба, см. в статье "Федерация".

Настройка свойств класса IssuedTokenServiceCredential в коде

  1. Свойство IssuedTokenAuthentication класса ServiceCredentials служит для возврата ссылки на экземпляр IssuedTokenServiceCredential. Доступ к этому свойству осуществляется через свойство Credentials класса ServiceHostBase.

  2. Установите для свойства AllowUntrustedRsaIssuers значение true, если необходимо аутентифицировать самостоятельно выданные маркеры, такие как карточки CardSpace. Значение по умолчанию — false.

  3. Заполните коллекцию, возвращаемую свойством KnownCertificates, экземплярами класса X509Certificate2. Каждый экземпляр представляет эмитента, от которого служба будет проверять подлинность токенов.

    Примечание.

    В отличие от клиентской коллекции, возвращаемой свойством ScopedCertificates, коллекция известных сертификатов не является коллекцией с ключом. Служба принимает маркеры, выдаваемые заданным сертификатом, независимо от адреса клиента, который отправил сообщение с выданным маркером (на него накладываются дополнительные ограничения, описанные ниже в этом разделе).

  4. Присвойте свойству CertificateValidationMode одно из значений перечисления X509CertificateValidationMode. Это можно сделать только в коде. Значение по умолчанию — ChainTrust.

  5. Если свойство CertificateValidationMode имеет значение Custom, присвойте экземпляр пользовательского класса X509CertificateValidator свойству CustomCertificateValidator.

  6. Если свойство CertificateValidationMode имеет значение ChainTrust или PeerOrChainTrust, присвойте свойству RevocationMode соответствующее значение из перечисления X509RevocationMode. Обратите внимание, что в режимах проверки PeerTrust и Custom, режим отзыва не используется.

  7. Если необходимо, присвойте экземпляр пользовательского класса SamlSerializer свойству SamlSerializer. Пользовательский сериализатор языка Security Assertions Markup Language (SAML) требуется, например, для анализа пользовательских утверждений SAML.

Для задания свойств IssuedTokenServiceCredential в конфигурации

  1. <issuedTokenAuthentication> Создайте элемент в качестве дочернего <serviceCredentials> элемента.

  2. Установите атрибут allowUntrustedRsaIssuers элемента <issuedTokenAuthentication> в true, если проверяется подлинность самовыданного токена, например, карточки CardSpace.

  3. Создайте элемент <knownCertificates>, являющийся дочерним для элемента <issuedTokenAuthentication>.

  4. Создайте ноль или более элементов <add>, которые являются дочерними элементами элемента <knownCertificates>, и с помощью атрибутов storeLocation, storeName, x509FindType и findValue укажите, как обнаружить сертификат.

  5. При необходимости задайте атрибут samlSerializer элемента <issuedTokenAuthentication> на имя типа настраиваемого класса SamlSerializer.

Пример

В следующем примере свойства объекта IssuedTokenServiceCredential задаются в коде.

// This method configures the IssuedTokenAuthentication property of a ServiceHost.
public static void ConfigureIssuedTokenServiceCredentials(
    ServiceHost sh, bool allowCardspaceTokens, IList<X509Certificate2> knownissuers,
    X509CertificateValidationMode certMode, X509RevocationMode revocationMode, SamlSerializer ser )
{
  // Allow CardSpace tokens.
  sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = allowCardspaceTokens;

  // Set up known issuer certificates.
  foreach(X509Certificate2 cert in knownissuers)
    sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add ( cert );

  // Set issuer certificate validation and revocation checking modes.
  sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode =
      X509CertificateValidationMode.PeerOrChainTrust;
  sh.Credentials.IssuedTokenAuthentication.RevocationMode = X509RevocationMode.Online;
  sh.Credentials.IssuedTokenAuthentication.TrustedStoreLocation = StoreLocation.LocalMachine;

  // Set the SamlSerializer, if one is specified.
  if ( ser != null )
    sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser;
}
' This method configures the IssuedTokenAuthentication property of a ServiceHost.
Public Shared Sub ConfigureIssuedTokenServiceCredentials( _
    ByVal sh As ServiceHost, _
    ByVal allowCardspaceTokens As Boolean, _
    ByVal knownissuers As IList(Of X509Certificate2), _
    ByVal certMode As X509CertificateValidationMode, _
    ByVal revocationMode As X509RevocationMode, _
    ByVal ser As SamlSerializer _
    )
    ' Allow CardSpace tokens.
    sh.Credentials.IssuedTokenAuthentication.AllowUntrustedRsaIssuers = _
    allowCardspaceTokens

    ' Set up known issuer certificates.
    Dim cert As X509Certificate2
    For Each cert In knownissuers
        sh.Credentials.IssuedTokenAuthentication.KnownCertificates.Add(cert)
    Next cert
    ' Set issuer certificate validation and revocation checking modes.
    sh.Credentials.IssuedTokenAuthentication.CertificateValidationMode = _
        X509CertificateValidationMode.PeerOrChainTrust
    sh.Credentials.IssuedTokenAuthentication.RevocationMode = _
    X509RevocationMode.Online

    ' Set the SamlSerializer, if one is specified.
    If Not (ser Is Nothing) Then
        sh.Credentials.IssuedTokenAuthentication.SamlSerializer = ser
    End If
End Sub

Чтобы федеративная служба проверяла подлинность клиента, для выданного маркера должны выполняться следующие условия:

  • Если в цифровой подписи выданного маркера используется идентификатор ключа безопасности RSA, свойство AllowUntrustedRsaIssuers должно иметь значение true.

  • если в подписи выданного маркера используется серийный номер издателя X.509, идентификатор ключа субъекта X.509 или идентификатор безопасности отпечатка X.509, выданный маркер должен быть подписан сертификатом из коллекции, возвращаемой свойством KnownCertificates класса IssuedTokenServiceCredential;

  • если выданный маркер подписан с помощью сертификата X.509, этот сертификат должен осуществлять проверку на основании семантики, определенной значением свойства CertificateValidationMode, независимо от того, был ли сертификат отправлен проверяющей стороне в качестве объекта X509RawDataKeyIdentifierClause или же получен из свойства KnownCertificates. Дополнительные сведения о проверке сертификатов X.509 см. в статье "Работа с сертификатами".

Например, установка свойства CertificateValidationMode на PeerTrust аутентифицирует любой выданный токен, чьи сертификаты подписи находятся в хранилище сертификатов TrustedPeople. В этом случае задайте для свойства TrustedStoreLocation значение CurrentUser или LocalMachine. Можно выбрать и другие режимы, в том числе режим Custom. Если выбран режим Custom, необходимо присвоить экземпляр класса X509CertificateValidator свойству CustomCertificateValidator. Пользовательский валидатор может проверять сертификаты по любым критериям. Дополнительные сведения см. в разделе "Практическое руководство. Создание службы, которая использует настраиваемый проверяющий сертификат".

См. также