找不到securityToken的有效键映射:'System.IdentityModel.Tokens.X509SecurityToken'和issuer

时间:2017-08-17 14:00:50

标签: asp.net authentication saml adfs ws-federation

我正在使用ADFS的IDP页面进行ADFS身份验证。

我能够成功重定向到IDP页面,并且能够在获得身份验证后成功重定向回我的应用程序。

返回我的应用程序后,我收到以下错误消息:

  

找不到securityToken的有效键映射:   'System.IdentityModel.Tokens.X509SecurityToken'和发行人

我在web.config文件中添加了以下代码来解密声明信息。

 <authority name="http://idp.neuronetics.com/adfs/services/trust">
          <keys>
            <add thumbprint="‎‎1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234"/>
          </keys>`enter code here
          <validIssuers>
            <add name="http://adfsServiceDomain/adfs/services/trust" />
          </validIssuers>
        </authority>

我已经回顾了许多与此相关的文章。大多数文章建议验证ADFS令牌签名证书的指纹。

我经过双重检查,指纹很完美。

有人对此问题有任何想法吗?

请告知。

如果您有任何疑虑或疑问,或者您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

由于您使用的是WIF而不是OWIN,因此您几乎可以覆盖默认的颁发者注册表并提供自己的注册表,从而更好地控制接受哪些发布者。

覆盖颁发者注册表涉及提供一个继承自IssuerNameRegistry

的类
public class CustomIssuerNameRegistry : IssuerNameRegistry
{
    public override string GetIssuerName( SecurityToken securityToken )
    {
        X509SecurityToken x509Token = securityToken as X509SecurityToken;
        if ( x509Token != null &&
             x509Token.Certificate != null
            )
        {
            // this is where you validate the certificate programatically
            // for example, you can verify the thumbprint against
            // a list of accepted thumprints

            // return a string, the name of the issuer to indicate
            // succesfull validation
            return "issuer name";
        }

        throw new SecurityTokenException( "Untrusted issuer." );
    }

并在web.config

中的WIF管道中注册颁发者注册表
<system.identityModel>
  <identityConfiguration>
    <issuerNameRegistry type="Namespace.CustomIssuerNameRegistry, AssemblyName" />
  </identityConfiguration>
</system.identityModel>

此方法可让您彻底调试传入令牌的证书。