Переопределение Saml2SecurityTokenHandler через web.config - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь проверить токен SAML, возвращенный AzureAD. Маркер SAML содержит узел SubjectConfirmation, поэтому я пытаюсь расширить класс Saml2SecurityTokenHandler для переопределения метода ValidateConfirmationData. Это я не могу сделать.

Я сделал следующие изменения конфигурации

<system.identityModel>
    <identityConfiguration>
      <securityTokenHandlers>
        <clear />
        <add type="MyNamespace.CustomSaml2SecurityTokenHandler, MyAssembly" />
        <securityTokenHandlerConfiguration>
          <audienceUris>
            <add value="http://localhost/MyApp"/>
          </audienceUris>
          <certificateValidation certificateValidationMode="None" />
          <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089">
            <trustedIssuers>
              <add thumbprint="<thumbprint>" name="MyIdentityName" />
            </trustedIssuers>
          </issuerNameRegistry>
        </securityTokenHandlerConfiguration>
      </securityTokenHandlers>
    </identityConfiguration>
  </system.identityModel>

Используемый код выглядит следующим образом

//get system.identityModel configuration and initialize
            var ic = new IdentityConfiguration(true);            
            ic.Initialize();

            //create token handlers collection with the configuration
            var thc = SecurityTokenHandlerCollection.CreateDefaultSecurityTokenHandlerCollection(
                ic.SecurityTokenHandlers.Configuration);

            //add current request URL for allowed audience validation (only the "http://host" part)
            //note: additional URLs can be configured in system.identityModel/identityConfiguration/securityTokenHandlers/securityTokenHandlerConfiguration/audienceUris
            //this might be required in some web farm deployments
            thc.Configuration.AudienceRestriction.AllowedAudienceUris.Add(
                new Uri(requestUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped)));
            thc.ValidateToken(token);

Проблема является то, что thc.ValidateToken не вызывает класс CustomSaml2SecurityTokenHandler (определенный через конфигурацию выше).

...