Поделиться через


Практическое руководство. Настройка учетных данных службы федерации

В 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. Пользовательский проверяющий элемент управления может проверять сертификаты, используя любые условия. Дополнительные сведения см. в разделе "Практическое руководство. Создание службы, которая использует настраиваемый проверяющий сертификат".

См. также