用于microsoft.identitymodel configsection的web.config转换

时间:2012-10-01 05:02:04

标签: asp.net visual-studio-2010 web-config transform claims-based-identity

如何使用标准的visual studio web.config转换来转换microsoft.identitymodel配置部分中的audienceUris和federatedAuthentication元素?

对于开发环境,我们将所有子域后缀为“-dev”以及特殊的localhost端口号,例如:realm =“https://client-dev.domain.com:444”。今天主web.config反映了这一点,但理想情况下我们想将此设置移动到Web.Debug.config并在Web.Release.config中我们想指定正确的受众和领域没有'-dev'后缀和本地端口设置。但是,尝试在Web.Debug.Config中的microsoft.identitymodel元素中放置xdt:Transform =“Replace”会导致此警告:

The 'http://schemas.microsoft.com/XML-Document-Transform:transform' attribute is not declared.

当然还有运行时故障(例如,无法找到servicecertificate)。

这是microsoft.identitymodel部分:

<configuration>
  <configSections>
    <section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </configSections>

  <microsoft.identityModel>
    <service>
      <applicationService>
        <claimTypeRequired>
          <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier" optional="false" />
          <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" optional="false" />
        </claimTypeRequired>
      </applicationService>
      <serviceCertificate>
        <certificateReference x509FindType="FindByThumbprint" findValue="NNNNNNNNNN" storeLocation="LocalMachine" storeName="My" />
      </serviceCertificate>
      <certificateValidation certificateValidationMode="None" />
      <audienceUris>
        <add value="https://url/" />
      </audienceUris>
      <federatedAuthentication>
        <wsFederation passiveRedirectEnabled="true" issuer="https://url/" realm="https://url/" requireHttps="true" />
        <cookieHandler requireSsl="true" />
      </federatedAuthentication>
      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <trustedIssuers>
          <add thumbprint="NNNNNNNNNN" name="https://url/" />
        </trustedIssuers>
      </issuerNameRegistry>
    </service>
  </microsoft.identityModel>
<configuration>

不起作用的现有解决方案:

1)这里提出了同样的问题,但没有得到适当的回应。 RemoveAll和Insert不起作用: Web config transform on microsoft.identityModel - 'http://schemas.microsoft.com/XML-Document-Transform' attribute is not declared

2)此外,尝试按照此线程上的建议操作命名空间,这也不起作用: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/9ededb66-3e34-4bba-8e20-a2cc6025f0f9

3)configSource看起来很有前途但在microsoft.identitymodel元素中指定时再次起作用。 我明白了:

Warning 1   The 'configSource' attribute is not declared.

http://blog.andreloker.de/post/2008/06/16/Keep-your-config-clean-with-external-config-files.aspx

任何帮助将不胜感激!感谢。

1 个答案:

答案 0 :(得分:0)

经过大量的反复试验后,我使用Loren Halvorson的XMLPreProcess从TemplateWeb.config自动生成正确的Web.config,作为每个项目的pre-Build事件的一部分。

虽然我本来希望Visual Studio尝试为开发人员工作,但是,时间就是金钱,是我继续前进的时候。毋庸置疑,它在SQL Azure SDK中也被破坏了,因为转换仅在您发布站点时发生。在最新的Azure SDK中,情况不再如此,因此转换也停止了。哦,快乐!

我认为这是一个优秀工具的链接,对于每个ASP.NET开发人员来说都是必备的:

http://xmlpreprocess.codeplex.com/