В этом разделе рассказывается о настройке обработчиков маркеров безопасности для приложения проверяющей стороны или службы маркеров безопасности (STS).

Обработчики маркеров безопасности можно настраивать в файле конфигурации приложения или программным способом, создавая объект конфигурации и задавая его в качестве свойства обработчиков маркеров безопасности.

Не рекомендуется задавать свойство Configuration для отдельного обработчика маркеров. Вместо этого следует задать свойство Configuration для коллекции обработчиков маркеров. Если необходимо установить свойство Configuration для отдельного обработчика маркеров, это следует делать после добавления обработчика в коллекцию. Дело в том, что при добавлении обработчика маркеров в коллекцию свойство Configuration этого обработчика устанавливается в конфигурации коллекции, а свойство ContainingCollection — в экземпляре коллекции. При удалении обработчика маркеров из коллекции эти свойства необходимо очистить.

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

Свойство Configuration можно установить для отдельного обработчика маркеров, если он используется без коллекции.

Конфигурацию обработчика маркеров безопасности можно также задать в файле конфигурации приложения. Ниже приводится пример конфигурации:

  Копировать код
<microsoft.identityModel> <!-- Эквивалент класса ServiceConfiguration. --> <service> <!-- Эквивалент коллекции обработчиков маркеров, используемой по умолчанию: ServiceConfiguration.SecurityTokenHandlers --> <securityTokenHandlers> <!-- Это конфигурация уровня коллекции, а не уровня обработчика. Можно настроить программным способом отдельный обработчик маркеров, как описано выше, хотя это не рекомендуется. В файле конфигурации это сделать нельзя. --> <securityTokenHandlerConfiguration> <!-- IssuerNameRegistry содержит список доверенных источников.--> <issuerNameRegistry /> <!-- ServiceTokenResolver используется для разрешения сертификатов шифрования при расшифровке маркера.--> <serviceTokenResolver /> <!-- IssuerTokenResolver используется для разрешения сертификатов подписи при проверке подписи маркера, выданного службой STS. --> <issuerTokenResolver /> <!-- AudienceUris содержит коды URI, для которых в приложении предполагается передача маркеров безопасности. --> <audienceUris mode="Always" /> </securityTokenHandlerConfiguration> </securityTokenHandlers> <!-- Это эквивалентно поиску коллекции обработчиков маркеров ActAs в диспетчере коллекций обработчиков маркеров одним из двух следующих способов: ServiceConfiguration.SecurityTokenHandlerCollectionManager["ActAs"] ServiceConfiguration.SecurityTokenHandlerCollectionManager[ SecurityTokenHandlerCollectionManager.Usage.ActAs]; --> <securityTokenHandlers name="ActAs"> </securityTokenHandlers> <issuerNameRegistry ... /> <serviceTokenResolver ... /> </service> <!-- Это эквивалентно созданию новой конфигурации ServiceConfiguration следующим способом: new ServiceConfiguration("CustomService"); --> <service name="CustomService"> </service> </microsoft.identityModel>

Настройка параметров отзыва и проверки для X509CertificateTokenHandler

В следующем примере кода показано, как программным способом настроить параметры отзыва и проверки для обработчика X509CertificateTokenHandler.

  Копировать код
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Configuration; using System.IdentityModel.Selectors; using System.Security.Cryptography.X509Certificates; using System.ServiceModel.Security;

class Sample { public static void ConfigureCustomValidator() { // 1a. Настройка объекта конфигурации службы (настраиваемая проверка) ServiceConfiguration serviceConfig = new ServiceConfiguration(); serviceConfig.CertificateValidationMode = X509CertificateValidationMode.Custom; serviceConfig.CertificateValidator = new CustomX509Validator();

		// 1b. Настройка отдельного обработчика X509SecurityTokenHandler (настраиваемая проверка) X509CertificateValidator customValidator = new CustomX509Validator(); X509SecurityTokenHandler x509Handler = new X509SecurityTokenHandler(customValidator); }

	public static void DisableRevocationMode() { // 2a. Настройка объекта конфигурации службы (изменение режима отзыва) ServiceConfiguration serviceConfig = new ServiceConfiguration(); serviceConfig.RevocationMode = X509RevocationMode.NoCheck; serviceConfig.TrustedStoreLocation = StoreLocation.LocalMachine; serviceConfig.CertificateValidationMode = X509CertificateValidationMode.ChainTrust;

		// 2b. Настройка отдельного обработчика X509SecurityTokenHandler (изменение режима отзыва) X509SecurityTokenHandler x509Handler = new X509SecurityTokenHandler(); X509ChainPolicy chainPolicy = new X509ChainPolicy(); chainPolicy.RevocationMode = X509RevocationMode.NoCheck; x509Handler.CertificateValidator = X509CertificateValidator.CreateChainTrustValidator(true, chainPolicy); }

	class CustomX509Validator : X509CertificateValidator { public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate) { // Вставьте здесь алгоритм проверки. } } }

Как настроить сопоставление учетных данных Windows

В следующем фрагменте кода показано, как настраивается сопоставление учетных данных Windows:

  Копировать код
X509SecurityTokenHandler x509Handler = new X509SecurityTokenHandler(); x509Handler.MapToWindows = true;

		UserNameSecurityTokenHandler usernameHandler = new WindowsUserNameSecurityTokenHandler();

		Saml11SecurityTokenHandler saml11Handler = new Saml11SecurityTokenHandler(); saml11Handler.SamlSecurityTokenRequirement.MapToWindows = true;

		Saml2SecurityTokenHandler saml2Handler = new Saml2SecurityTokenHandler(); saml2Handler.SamlSecurityTokenRequirement.MapToWindows = true;