none
WIF-Federation Probleme de lecture Web.config

    Question

  • Bonjour

    J'ai un problème de lecture de fichier de configuration

    l'erreur retournée "Impossible de trouver un élément de point de terminaison portant le nom 'stsConfiguration' et le contrat 'Microsoft.IdentityModel.Protocols.WSTrust.IWSTrustChannelContract' dans la section de configuration du client ServiceModel. Ceci peut être dû au fait que le fichier de configuration de votre application est introuvable ou que l'élément de point de terminaison correspondant à ce nom est introuvable dans l'élément client."


    J'utilise actuellement WIF avec un CutomUsernameSecurityTokenHandler et le tout fonctionne très bien, il m'a été demandé de pouvoir utiliser l'authentification via ADFS, je transforme donc mon "IdentityProvider" en "FedrationProvider" qui me permettra la transformation des claims issues des "IdentityProvider" et je recrée un STS indépendant reprenant mon custom UsernameSecurityTokenHandler pour générer un token via un username password, ensuite j'y ajouterais ADFS


    Dans mon fichier de configuration du "FederationProvider", j ai donc rajouté un client

    <?xml version="1.0"?>
    <configuration>
    
      <configSections>
        <section name="microsoft.identityModel" type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <section name="AppliesToMap" type="MonAppli.FP.AppliesToMap, MonAppli.FP" />
      </configSections>
      
      <system.web>
        <compilation debug="true" targetFramework="4.0" />
      </system.web>
    
      <system.serviceModel>
    
        <client>
          <endpoint address="http://localhost:8020/IdentityProvider.svc"
            binding="ws2007HttpBinding" bindingConfiguration="monWS2007Binding"
            contract="Microsoft.IdentityModel.Protocols.WSTrust.IWSTrust13SyncContract"
            name="stsConfiguration">
            <identity>
              <certificate encodedValue="monEncodedValue" />
            </identity>
          </endpoint>
        </client>
        
        <services>
          <service name="Microsoft.IdentityModel.Protocols.WSTrust.WSTrustServiceContract" behaviorConfiguration="MonBehavior">
            <endpoint address="" binding="ws2007HttpBinding" bindingConfiguration="monWS2007Binding" contract="Microsoft.IdentityModel.Protocols.WSTrust.IWSTrust13SyncContract"/>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
            <host>
              <baseAddresses>
                <add baseAddress="http://localhost:8010/FederationProvider.svc"/>
              </baseAddresses>
            </host>
          </service>
        </services>
    
        <bindings>
          <ws2007HttpBinding>
            <binding name="monWS2007Binding" messageEncoding="Mtom">
              <security mode="Message">
                <message clientCredentialType="UserName" negotiateServiceCredential="false"
                  establishSecurityContext="false" />
              </security>
            </binding>
          </ws2007HttpBinding>
        </bindings>
    
        <behaviors>
          <serviceBehaviors>
            <behavior name="MonBehavior">
              <serviceMetadata httpGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="true"/>
            </behavior>
          </serviceBehaviors>
        </behaviors>
    
    
    
    

    J'ai ensuite ajouté ce code pour générer une RST

                    WSTrustChannelFactory stsClient = new WSTrustChannelFactory("stsConfiguration");
                    stsClient.Credentials.UserName.UserName = userNameTokenFromRP.UserName;
                    stsClient.Credentials.UserName.Password = userNameTokenFromRP.Password;
    
                    IWSTrustChannelContract stsProxy = stsClient.CreateChannel();
    
                    RequestSecurityToken rst = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue, WSTrust13Constants.KeyTypes.Symmetric);
                    rst.AppliesTo = new System.ServiceModel.EndpointAddress("http://localhost:8010/FederationProvider.svc");
                    rst.Claims.Add(new RequestClaim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", false));
                    rst.Claims.Add(new RequestClaim("http://www.learningwcf.com/samples/2010/claims/permission", false));
    
                    rst.Issuer = new System.ServiceModel.EndpointAddress("http://localhost:8020/IdentityProvider.svc");
                    rst.Lifetime = new Lifetime(DateTime.Now, DateTime.Now + new TimeSpan(0, 30, 0));
                    rst.TokenType = Microsoft.IdentityModel.Tokens.SecurityTokenTypes.OasisWssSaml11TokenProfile11;
    
                    //stsClient.Credentials.SupportInteractive = false;
    
                    RequestSecurityTokenResponse rstr;
                    SecurityToken stsToken = stsProxy.Issue(rst, out rstr);

    A la première ligne une exception arrive me disant qu'il n'arrive pas à trouver le "stsConfiguration"

    Auriez vous une piste a me donner pour régler ce problème

    Merci

    Ange


    vendredi 11 mai 2012 08:51

Réponses

  • Réponse trouvée et qui pourra servir à d'autre:

    Dans le configuration du client le contrat n'est pas "Microsoft.IdentityModel.Protocols.WSTrust.IWSTrust13SyncContract" mais "Microsoft.IdentityModel.Protocols.WSTrust.IWSTrustChannelContract"

    Ce n'est pas pour autant que la fédération fonctionne chez moi, problème de lecture du RequestSecurityTokenResponse mais ça fait déjà un peu avancer le shmilblick


    • Marqué comme réponse ange.fr lundi 14 mai 2012 16:47
    • Modifié ange.fr lundi 14 mai 2012 16:48
    lundi 14 mai 2012 16:44

Toutes les réponses