Asp.net 如何让SecurityTokenHandler从web.config加载其配置?

Asp.net 如何让SecurityTokenHandler从web.config加载其配置?,asp.net,saml,wif,Asp.net,Saml,Wif,我一直在努力尝试使用WIF将SAML2 SSO入口点添加到asp.NET4.6Web应用程序中——这是我在开始之前完全不熟悉的技术。到目前为止,有效的方法是以编程方式创建所有对象,为此,我对各种对象类型(如Saml2SecurityTokenHandler、X509CertificateValidator和IssuerNameRegistry)进行了子类化,并为此处理程序从头构建了一个SecurityTokenHandlerConfiguration对象。但我注意到,正确的方法是从web.con

我一直在努力尝试使用WIF将SAML2 SSO入口点添加到asp.NET4.6Web应用程序中——这是我在开始之前完全不熟悉的技术。到目前为止,有效的方法是以编程方式创建所有对象,为此,我对各种对象类型(如Saml2SecurityTokenHandler、X509CertificateValidator和IssuerNameRegistry)进行了子类化,并为此处理程序从头构建了一个SecurityTokenHandlerConfiguration对象。但我注意到,正确的方法是从web.config加载SecurityTokenHandlerConfiguration,或者更确切地说是从app.config加载SecurityTokenHandlerConfiguration,因为它位于侧程序集中,而不是网站本身

如果我能做到这一点,我就可以删除很多我一直在用管道胶带粘在一起的编程内容。所以我开始在web.config中添加必要的部分。我将identityModel部分添加到configSections标记中,并将类似的内容添加到我的配置中:

<system.identityModel>
  <identityConfiguration>
    <tokenReplayDetection enabled="true" />
    <audienceUris>
      <add value="http://myurl.com" />
    </audienceUris>
    <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089">
      <trustedIssuers>
        <add thumbprint="1234123412341234ABCDABCDABCDABCD00000001" name="theirurl.com" />
      </trustedIssuers>
    </issuerNameRegistry>
  </identityConfiguration>
</system.identityModel>

我也尝试过这样设置,看起来应该正好适合我的需要:

<system.identityModel>
  <identityConfiguration>
    <securityTokenHandlers>
      <securityTokenHandlerConfiguration>
        <tokenReplayDetection enabled="true" />
        <audienceUris mode="Always">
          <add value="http://myurl.com" />
        </audienceUris>
        <issuerNameRegistry type="System.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089">
          <trustedIssuers>
            <add thumbprint="1234123412341234ABCDABCDABCDABCD00000001" name="theirurl.com" />
          </trustedIssuers>
        </issuerNameRegistry>
      </securityTokenHandlerConfiguration>
    </securityTokenHandlers>
  </identityConfiguration>
</system.identityModel>

问题是我似乎无法弥合配置和代码之间的差距。似乎没有什么东西可以自动加载,我也找不到任何关于如何手动加载的有用信息。似乎整个部分都被忽略了。如果需要“加载配置”步骤,我找不到描述它的地方

如何构造Saml2SecurityTokenHandler的实例,并从app.config中加载其配置

更新
我不再追求这种方法。我仍然有点想知道它是如何工作的,但它不再重要。

通过创建实例,它将从配置中读取您的设置。默认构造函数将执行此操作,但也有一个构造函数重载,允许您显式指定此操作(
newidentityconfiguration(true)
)。如果没有配置元素,该元素也会授予您一个异常

如果尚未清除SecurityTokenHandler的集合,则可以通过IdentityConfiguration实例的属性访问其中的多种。这对我来说是真实的,所以我必须搜索我正在寻找的处理程序

在我的例子中,我想读取SessionSecurityTokenHandler的TokenLifeTime属性(另外使用System.Linq):

System.IdentityModel.Tokens.SessionSecurityTokenHandler SessionSecurityTokenHandler=
新标识配置(真)
.SecurityTokenHandler
.SingleOrDefault(sth=>sth.TokenType==typeof(System.IdentityModel.Tokens.SessionSecurityToken))
as System.IdentityModel.Tokens.SessionSecurityTokenHandler;
TimeSpan tokenLifeTime=sessionSecurityTokenHandler.tokenLifeTime;
我的配置如下所示:


:

默认情况下,集合由以下处理程序类型填充:SamlSecurityTokenHandler、Saml2SecurityTokenHandler、KerberosSecurityTokenHandler、WindowsUserNameSecurityTokenHandler、RsaSecurityTokenHandler、X509SecurityTokenHandler和EncryptedSecurityTokenHandler。可以使用添加、删除和清除元素修改集合。必须确保集合中只存在一个特定类型的处理程序。例如,如果从Saml2SecurityTokenHandler类派生处理程序,则可以在单个集合中配置处理程序或Saml2SecurityTokenHandler,但不能同时配置两者