WIF 配置:issuerNameRegistry 与 certificateValidation
WIF config: issuerNameRegistry vs. certificateValidation
在 Windows Identity Foundation (WIF) 4.5 配置中,issuerNameRegistry
和 certificateValidation
之间的关系是什么?每个 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等不相关。
在 Windows Identity Foundation (WIF) 4.5 配置中,issuerNameRegistry
和 certificateValidation
之间的关系是什么?每个 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等不相关。