2015-09-15 4 views
0

Je suis nouveau à Windows Identity Framework. Mon organisation dispose de plusieurs environnements qui utilisent différents noms "autorité" et "point de terminaison". Mon application peut détecter l'environnement lors de l'exécution. J'ai regardé la documentation de WIF et à travers stackoverflow et ne suis pas, jusqu'ici, capable de trouver tout ce que je peux utiliser pour m'aider avec ce problème.Framework WIF pour .NET MVC dans plusieurs environnements?

L'exemple ci-dessous œuvres dans mon environnement localhost:

<add key="ida:FederationMetadataLocation" value="https://test.login.mycompany.com/FederationMetadata/2007-  06/FederationMetadata1.xml" /> 
    <add key="ida:Realm" value="https://localhost/webapp" /> 
    <add key="ida:AudienceUri" value="https://localhost/webapp/" /> 

Dans mon environnement de développement de la même section doit être:

<add key="ida:FederationMetadataLocation" value="https://dev.login.mycompany.com/FederationMetadata/2007-06/FederationMetadata1.xml" /> 
    <add key="ida:Realm" value="https://dev.mycompany.com/webapp" /> 
    <add key="ida:AudienceUri" value="https://dev.mycompany.com/webapp/" /> 

Je dois aussi apporter des modifications similaires à la AudienceURIs et la federationConfiguration.

Voici le web.config complet localhost:

 <?xml version="1.0" encoding="utf-8"?> 

<configuration> 
    <configSections> 
    <!--Added for Windows Identity Framework --> 
     <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
     <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" /> 
    <!--END: Added for Windows Identity Framework --> 
    </configSections> 

    <appSettings> 
    <!--Added for Windows Identity Framework --> 
    <add key="ida:FederationMetadataLocation" value="https://test.login.mycompany.com/FederationMetadata/2007-06/FederationMetadata1.xml" /> 
    <add key="ida:Realm" value="https://localhost/webapp" /> 
    <add key="ida:AudienceUri" value="https://localhost/webapp/" /> 
    <!--END: Added for Windows Identity Framework --> 
    </appSettings> 
    <system.web> 
    ... 
    </system.web> 
    <system.webServer> 
    <!--Added for Windows Identity Framework --> 
    <modules> 
     <add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
     <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" /> 
    </modules> 
    <!--END: Added for Windows Identity Framework --> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding ... 
    </assemblyBinding> 
    </runtime> 

    <!--Added for Windows Identity Framework --> 
    <system.identityModel> 
    <identityConfiguration> 
     <audienceUris> 
     <add value="https://localhost/webapp" /> 
     <add value="https://localhost/webapp/FederationResult/" /> 
     </audienceUris> 
     <securityTokenHandlers> 
     ... 
     </securityTokenHandlers> 
     <certificateValidation certificateValidationMode="None" /> 
     <issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"> 
     <authority name="http://test.login.mycompany.com/adfs/services/trust"> 
      <keys> 
      <add thumbprint="123320493" /> 
      </keys> 
      <validIssuers> 
      <add name="http://test.login.mycompany.com/adfs/services/trust" /> 
      </validIssuers> 
     </authority> 
     </issuerNameRegistry> 
    </identityConfiguration> 
    </system.identityModel> 

    <system.identityModel.services> 
    <federationConfiguration> 
     <wsFederation 
     issuer="https://test.login.mycompany.com/adfs/ls/" 
     realm="https://localhost/webapp/" 
     reply="https://localhost/webapp/" 
     passiveRedirectEnabled="true" 
     requireHttps="true" /> 
     <cookieHandler name="LocalFedAuthRounding" requireSsl="true" /> 
    </federationConfiguration> 
    </system.identityModel.services> 

    <!--Added for Windows Identity Framework --> 

</configuration> 

Le WIF fournit des méthodes pour le faire? J'ai regardé les documents et je n'arrive pas à comprendre comment faire ces changements.

Merci, Matt

Répondre

0

L'outil d'identité et l'accès à partir de Visual Studio permet seulement pour une « autorité » à la fois. Si vous voulez une autorité différente par environnement (disons que votre site est déployé dans TST, acceptation et production), vous devrez considérer les transformations de configuration web au moment du déploiement pour configurer l'autorité correcte. Toutefois, si vous devez accepter des jetons de sécurité provenant de plusieurs autorités dans le même site Web déployé, vous devez fusionner manuellement la section pour system.IdentityModel en une seule. WIF prend en charge (Il essayera chaque option une par une), mais pas IDA. La partie system.identityModel.Services est plus délicate car c'est là que vous dites à WIF comment faire une redirection pour un scénario de connexion passive. Cette partie que vous devrez faire manuellement dans le code. Ce n'est pas si dur. Après tout, vous avez juste besoin de rediriger vers une URL -cléverly composée. Vous pouvez également utiliser Windows AZure ACS ou Thinktecture Identity Server pour protéger les différents fournisseurs d'identité de votre application. Les fournisseurs d'identité (autorités dans votre langue) sont ensuite ajoutés au niveau STS et votre application fait confiance au STS. Aussi, n'oubliez pas la déconnexion qui devrait être redirigée vers le même fournisseur d'identité que vous avez utilisé pour vous connecter en premier lieu.

+0

Je ne parviens pas à modifier la configuration lors du déploiement. Je me déploie dans un environnement, puis je passe de cet environnement au reste sans redéploiement. Je pense que je dois faire quelque chose dans le code pour pointer vers un web.config différent pour chaque environnement. Alternativement, il doit y avoir un moyen de le faire dans le code ... –