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


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

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

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

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

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

Задание свойств объекта IssuedTokenServiceCredential в коде

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

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

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

    ms730131.note(ru-ru,VS.100).gifПримечание
    В отличие от клиентской коллекции, возвращаемой свойством 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 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
// 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;
}

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

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

См. также

Задачи

Образец федерации
Как упорядочить отключения безопасных сеансов в WSFederationHttpBinding
Как создать WSFederationHttpBinding
Как создавать федеративный клиент

Основные понятия

Федерация
Федерация и доверие
Работа с сертификатами
Режимы проверки подлинности SecurityBindingElement