Wie zu verwenden IssuedToken in einem client mit einem WCF-Service-Referenz

Ich habe eine WinForms-Anwendung mit einem Service-Referenz erzeugt, die von einem WCF-Dienst, der verwendet WS2007FederationHttpBinding. Ich kann nicht verstehen, warum das folgende nicht funktioniert.

Meine WinForms-app ruft einen WCF-Dienst mithilfe von Thinktecture.IdentityServer, bis zu behandeln BearerKey Typ Token.

Von meinen Klienten, die ich einfach erwerben einen gültigen access-token und diesen Aufruf:

    private static void CallServiceReference(SecurityToken token)
    {
        ServiceReference1.ClaimsServiceContractClient svcRef = new ServiceReference1.ClaimsServiceContractClient();

        svcRef.ChannelFactory.Credentials.SupportInteractive = false;
        svcRef.ChannelFactory.CreateChannelWithIssuedToken(token);
        var claims = svcRef.GetClaims(); 
    }

Hier ist die winforms-client-app.config für die service-Referenz:

<system.serviceModel>
      <bindings>
              <ws2007FederationHttpBinding>
                      <binding name="WS2007FederationHttpBinding_ClaimsServiceContract">
                              <security mode="TransportWithMessageCredential">
                                      <message establishSecurityContext="false" issuedKeyType="BearerKey">
                                              <issuer address="https://identity.MyCo.com/issue/wsfed" binding="ws2007HttpBinding"
                                                      bindingConfiguration="https://identity.MyCo.com/issue/wstrust/mixed/username" />
                                              <issuerMetadata address="https://identity.MyCo.com/issue/wstrust/mex" />
                                              <tokenRequestParameters>
                                                      <trust:SecondaryParameters xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
                                                              <trust:KeyType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
                                                              <trust:CanonicalizationAlgorithm xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://www.w3.org/2001/10/xml-exc-c14n#</trust:CanonicalizationAlgorithm>
                                                              <trust:EncryptionAlgorithm xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://www.w3.org/2001/04/xmlenc#aes256-cbc</trust:EncryptionAlgorithm>
                                                      </trust:SecondaryParameters>
                                              </tokenRequestParameters>
                                      </message>
                              </security>
                      </binding>
              </ws2007FederationHttpBinding>
              <ws2007HttpBinding>
                      <binding name="https://identity.MyCo.com/issue/wstrust/mixed/username">
                              <security mode="TransportWithMessageCredential">
                                      <transport clientCredentialType="None" />
                                      <message clientCredentialType="IssuedToken" establishSecurityContext="false" />
                              </security>
                      </binding>
              </ws2007HttpBinding>
      </bindings>
      <client>
              <endpoint address="https://roadie/WebTest/service.svc" binding="ws2007FederationHttpBinding"
                      bindingConfiguration="WS2007FederationHttpBinding_ClaimsServiceContract"
                      contract="ServiceReference1.ClaimsServiceContract" name="WS2007FederationHttpBinding_ClaimsServiceContract" />
      </client>
  </system.serviceModel>

Wenn ich versuche, und führen Sie die service-Aufruf (svcRef.GetClaims()) bekomme ich diese Fehlermeldung:

"Die Adresse des security token Emittentin ist nicht angegeben. Eine explizite Emittent-Adresse muss angegeben werden, in der verbindlich für die Zielgruppe ' https://identity.MyCo.com/issue/wsfed " oder von den lokale Emittenten-Adresse muss konfiguriert werden, in der Anmeldeinformationen."

Dieser Fehler ist lahm und unübersichtlich ist, scheint, wie es einem Emittenten angegeben in der config!!!

Schließlich kenne ich die WCF-service-und Identity-service gültig sind, weil diese alle funktioniert mithilfe einer benutzerdefinierten ChannelFactory, auch mit dieser genau die gleiche Methode anwenden, die token:

var channel = factory.CreateChannelWithIssuedToken(token);

Aber meine Anforderung ist die Verwendung der generierten ServiceReference. 🙁

InformationsquelleAutor dapug | 2013-02-13
Schreibe einen Kommentar