2013-04-23 6 views
2

일부 saml 정보가 들어있는 xml 파일 인 saml.config가 있습니다. 이 정보는 개발 및 준비 URL 대신 제작 URL을 포함하도록 릴리스 빌드에서 변형되어야합니다. 내 개발 및 스테이징 환경에서 변형이 완벽하게 발생합니다. 릴리스 환경에서는 변형이 발생하지 않습니다.AppHarbor 사용자 지정 구성 파일 변환

저는 변환을 테스트하기 위해 http://webconfigtransformationtester.apphb.com/을 시험해 보았습니다. 그리고 그들은 적용되지 않았지만, VS는 그것들을 완벽하게 적용합니다.

기본 saml.config 파일 :

<?xml version="1.0"?> 
<SAMLConfiguration xmlns="urn:componentspace:SAML:2.0:configuration"> 
    <ServiceProvider Name="Portal.Web" AssertionConsumerServiceUrl="http://localhost:49462/SingleSignOn/ConsumeAssertion"/> 
    <PartnerIdentityProvider Name="MTMIdentity" 
          SignAuthnRequest="false" 
          WantResponseSigned="false" 
          WantAssertionSigned="false" 
          WantAssertionEncrypted="false" 
          SingleSignOnServiceUrl="https://identity.*********.com/SingleSignOn/"/> 
</SAMLConfiguration> 

변형 파일 :

<?xml version="1.0" encoding="utf-8" ?> 
<SAMLConfiguration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xmlns="urn:componentspace:SAML:2.0:configuration"> 
    <ServiceProvider Name="Portal.Web" AssertionConsumerServiceUrl="https://***********.com/SingleSignOn/ConsumeAssertion" xdt:Transform="SetAttributes" xdt:Locator="Match(Name)" /> 
</SAMLConfiguration> 

*******와 서비스 제공 업체 AssertionConsumerServiceUrl에서 로컬 호스트 URL을 교체해야 결과 ****. com 버전이지만 그렇지 않습니다.

<?xml version="1.0"?> 
<SAMLConfiguration xmlns="urn:componentspace:SAML:2.0:configuration"> 
    <ServiceProvider Name="Portal.Web" AssertionConsumerServiceUrl="http://localhost:49462/SingleSignOn/ConsumeAssertion" /> 
    <PartnerIdentityProvider Name="MTMIdentity" SignAuthnRequest="false" WantResponseSigned="false" WantAssertionSigned="false" WantAssertionEncrypted="false" SingleSignOnServiceUrl="https://identity.********.com/SingleSignOn/" /> 
</SAMLConfiguration> 

변환 테스터가 적합하지 않은 이유는 무엇입니까? 변형?

편집 :

내가 로컬 및 우리의 스테이징 환경에서 변환을 처리 할 수 ​​SlowCheetah 추가 기능/nuget 패키지를 사용하는 것이 추가해야합니다. 문서 (http://support.appharbor.com/kb/getting-started/managing-environments)를 고려

구성 파일 변환 대응 .release.config 파일 모두의 .config 파일에 지원되는 상태.

나는 AppHarbor가 SlowCheetah없이이 작업을 수행 할 수 있다고 가정합니다. 그러나 WebConfigTransformTester 도구는이 변환을 적용하지 않습니다.

그럼에도 불구하고 질문은 여전히 ​​있습니다.이 변환을 어떻게 적용 할 수 있습니까? AppHarbor에서 SlowCheetah를 사용할 수 있습니까?

편집 : 추가 조사시

, AppHarbor뿐만 아니라의 Web.config에 변환을 적용하지 않은 것 같습니다.

내 CONFIGS : 웹에서

enter image description here

appSettings는.구성 환경이

이 릴리스 변환 "개발"로 설정되어

<appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="aspnet:UseHostHeaderForRequestUrl" value="true" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="Environment" value="Development" /> 
</appSettings> 

주의 : 환경으로 대체되고

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <appSettings> 
     <add key="Environment" value="Release" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" /> 
    </appSettings> 
    <system.web> 
     <compilation xdt:Transform="RemoveAttributes(debug)" /> 
     <customErrors defaultRedirect="GenericError.htm" mode="Off" xdt:Transform="Replace"> 
      <error statusCode="500" redirect="InternalError.htm"/> 
     </customErrors> 
    </system.web> 
</configuration> 

공지 사항

AppHarbor 환경을 "해제"

enter image description here

AppHarbor에 배포 한 후 빌드를 다운로드하고 Web.Config를 확인한 후 "개발"에서 환경 설정을 유지합니다.

편집 :

내가보기에 환경 AppSetting 출력을 읽어 내 컨트롤러 중 하나에 액션을 추가하고, 놀랍게도 많은는 "릴리스"이었다!

그래서 무엇을 제공합니까? "다운로드 빌드"컨텐트에는 변환이 없지만 요청이 발생하면 어떻게됩니까? AppHarbor은 언제 변형을 적용합니까? 빌드하는 대신 런타임에 실행합니까?

편집 :

가 AppHarbor들에서 다시 들었과 변환에 일어나는 실제 여전히 게시의 최종 출력되지 않습니다 빌드는 "게시 웹 사이트"폴더를이 순간에도 게시 행위. 의 xmlns는 설정 파일의 루트 노드의 속성 때문에

덕분에, 조

답변

2

우리는이 문제에 대해 (최신 변환 어셈블리를 사용하여)이 문제에 대한 솔루션을 출시했으며 그에 따라 http://webconfigtransformationtester.apphb.com/을 업데이트했습니다. 귀하의 변환은 예상대로 적용되어야합니다.

이 문제에 대한 철저한 조사에 감사드립니다.

0

가 찾아 와서, 방식 변환이 장소를 참가에 관해서는 내 원래의 질문에 대한 답변입니다.

불행하게도 왜 변형이 발생하지 않았는지에 대한 정보를 제공하지 않지만 코드를 살펴보면 사용 가능한 로거가 있음을 알 수 있지만 null로 설정됩니다. .

코드를 가져 와서 로거를 추가하고 "소스 문서에 '/ SAMLConfiguration'과 일치하는 요소가 없습니다"라는 경고가 나타납니다. 조금 더 파고 난이 게시물 Why does this web.config transform say it can't find the applicationSettings element? Sayed의 대답에서 그가 오래된 MSBuild 변환 작업은 xmlns 속성을 존중하지 않는다는 것을 알게되었습니다.

구성 파일과 변환 파일 모두에서 xmlns 특성을 제거하면 문제가 해결됩니다.

그러나 제 경우에는 xmlns 속성이 필요하므로 제거 할 수 없습니다.

그래서 AppHarbor이 MSBuild v11.0 어셈블리를 사용하기 위해 변환 어셈블리를 업데이트 할 때까지 저는 거의 고생했습니다.

관련 문제