WIF 配置:issuerNameRegistry 与 certificateValidation

WIF config: issuerNameRegistry vs. certificateValidation

在 Windows Identity Foundation (WIF) 4.5 配置中,issuerNameRegistrycertificateValidation 之间的关系是什么?每个 SAML 2.0 断言的哪一部分被验证?

例如:下面的代码和配置将验证颁发者证书是否具有给定的指纹。但是我假设 "None" 以外的 certificateValidationMode 会验证一些额外的细节?

var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
var token = handlers.ReadToken( myxmlReader );
var identities = handlers.ValidateToken( token );

配置:

  <system.identityModel>
    <identityConfiguration>
      <securityTokenHandlers>
        <securityTokenHandlerConfiguration>
          <tokenReplayDetection enabled="true" />
          <audienceUris>
            <add value="https://localhost:1234/MyApp" />
          </audienceUris>
          <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089">
            <trustedIssuers>
              <add thumbprint="1111111111111" name="http://some.domain/adfs/services/trust" />
            </trustedIssuers>
          </issuerNameRegistry>
          <certificateValidation certificateValidationMode="None"/>
        </securityTokenHandlerConfiguration>
      </securityTokenHandlers>
    </identityConfiguration>
  </system.identityModel>

或者这只是实现相同目的的两个替代方案(验证颁发者持有您信任的证书)。

IssuerNameRegistry 是从指纹到 EntityID 的查找 table。只有 table 中的发行者才会被信任。

CertificateValidationMode 是 table 要求之上的附加要求。 "None" 几乎总是最佳设置。因为信任是通过元数据建立的,通常不是通过对 CA 的信任链。所以ChainBuilding、CRL等不相关。