Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf 实现WIF ActAs场景:传出消息的身份检查失败_Wcf_X509certificate_Wif_Delegation_Federation - Fatal编程技术网

Wcf 实现WIF ActAs场景:传出消息的身份检查失败

Wcf 实现WIF ActAs场景:传出消息的身份检查失败,wcf,x509certificate,wif,delegation,federation,Wcf,X509certificate,Wif,Delegation,Federation,因此,我试图从一个网站使用WCF服务,并将该网站从STS获得的IClaimsIdentity传递给该服务 当我试图通过ActAs通道调用服务方法时,我在客户机上得到以下错误(查看跟踪日志,它永远不会到达服务,并且STS正确地通过所有令牌发送): 传出邮件的身份检查失败。预期的 身份是 “身份(http://schemas.xmlsoap.org/ws/2005/05/identity/right/possessproperty: )“因为 这个http://localhost/MyWCFHost

因此,我试图从一个网站使用WCF服务,并将该网站从STS获得的IClaimsIdentity传递给该服务

当我试图通过ActAs通道调用服务方法时,我在客户机上得到以下错误(查看跟踪日志,它永远不会到达服务,并且STS正确地通过所有令牌发送):

传出邮件的身份检查失败。预期的 身份是 “身份(http://schemas.xmlsoap.org/ws/2005/05/identity/right/possessproperty: )“因为 这个http://localhost/MyWCFHost/MyService.svc'目标端点

我有一个自定义的IssuedTokenForceCertificate绑定,所有的证书都可以,就我所见,它应该可以工作,但没有骰子。如果能有另一双眼睛看着我的配置并帮助我,我将不胜感激:

正在使用网站配置:

  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="CustomBinding_IMyService">
          <security defaultAlgorithmSuite="Default" authenticationMode="IssuedTokenForCertificate"
            requireDerivedKeys="true" includeTimestamp="true" messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10"
            requireSignatureConfirmation="true">
            <issuedTokenParameters tokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1">
              <additionalRequestParameters>
                <trust:SecondaryParameters xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
                  <trust:TokenType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1</trust:TokenType>
                  <trust:KeyType xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey</trust:KeyType>
                </trust:SecondaryParameters>
              </additionalRequestParameters>
              <issuer address="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc"
                binding="ws2007HttpBinding" bindingConfiguration="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc">
              </issuer>
              <issuerMetadata address="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc/mex" />
            </issuedTokenParameters>
            <localClientSettings detectReplays="true" />
            <localServiceSettings detectReplays="true" />
          </security>
          <textMessageEncoding />
          <httpTransport />
        </binding>
      </customBinding>
      <ws2007HttpBinding>
        <binding name="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc">
          <security>
            <message establishSecurityContext="false" />
          </security>
        </binding>
      </ws2007HttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost/MyWCFHost/MyService.svc" binding="customBinding"
        bindingConfiguration="CustomBinding_IMyService" contract="MyService.IMyService"
        name="CustomBinding_IMyService">
        <identity>
          <!--<certificate encodedValue="AwAAAAEAAAAUAAAAV2ILlfzl9NIHEiGv1rUCSitq8I0gAAAAAQAAAP8BAAAwggH7MIIBaKADAgECAhBTTBmG1HyUkEDVFmVUxfDLMAkGBSsOAwIdBQAwFTETMBEGA1UEAxMKRXRhbmEgUm9vdDAeFw0xMjA5MjExMjE2MDRaFw0zOTEyMzEyMzU5NTlaMB8xHTAbBgNVBAMTFEV0YW5hIFNUUyBFbmNyeXB0aW9uMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0lbzr1b1aNiXGhwKMTO58QbLbbKoUtTRkA4egMlmip1Vm46BnscWAMvXA5kyzuqK6Cw/5bel15i0pZXR4kjByKbSr65V0/ODGrkUHaYb5vT8RzCczYcgzJmPGWawMYYJT8PXLXHkFmZZGXFZhiUBzyNMWh8YH16I/wFtUgmaBAQIDAQABo0owSDBGBgNVHQEEPzA9gBAV68U+Vhoc0Nu9qPJXfJSRoRcwFTETMBEGA1UEAxMKRXRhbmEgUm9vdIIQgnOTDbZVCaJFTK8PPAGynTAJBgUrDgMCHQUAA4GBACHLr32oqkFjKGN/fqk2VnsNNIs9niHQ4Q6UbJ252YWf4wFIz9Ho/+ZdFxC4tSHxa/IMH0kzYpRL5p61Zd8/QeryWCStqvoNPwyapaY3g0Pkm6dy6NJ82kX5eJxLjdJp8MVadPJs4VA7Smf+e9lMMoONAGP07AvzAVhtiYK2yMmH" />-->
          <certificateReference findValue="57620B95FCE5F4D2071221AFD6B5024A2B6AF08D" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1
http://docs.oasis-open.org/ws-sx/ws-trust/200512/SymmetricKey
WCF服务配置:

  <system.serviceModel>
    <diagnostics>
      <messageLogging logMalformedMessages="true" logMessagesAtTransportLevel="true" />
    </diagnostics>
    <services>
      <service name="RPWCFApp.MyService" behaviorConfiguration="MyServiceBehaviour">
        <endpoint address="" binding="customBinding" bindingConfiguration="CustomBindingConfiguration_IssuedTokenOverTransport" contract="RPWCFApp.IMyService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehaviour">
          <federatedServiceHostConfiguration />
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
          <serviceCredentials>
            <serviceCertificate findValue="81A5DB3796F48B00FAC37CE67D7D8CA43078B996" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <extensions>
      <behaviorExtensions>
        <add name="federatedServiceHostConfiguration" type="Microsoft.IdentityModel.Configuration.ConfigureServiceHostBehaviorExtensionElement, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </behaviorExtensions>
    </extensions>

    <bindings>
      <customBinding>
        <binding name="CustomBindingConfiguration_IssuedTokenOverTransport">
          <security authenticationMode="IssuedTokenForCertificate" messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10">
            <issuedTokenParameters keyType="SymmetricKey" tokenType="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1">
              <issuer address="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc" binding="ws2007HttpBinding" bindingConfiguration="IssuedTokenBinding" />
              <issuerMetadata address="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc/mex" />
            </issuedTokenParameters>
          </security>
          <textMessageEncoding />
          <httpTransport />
        </binding>
      </customBinding>
      <ws2007HttpBinding>
        <binding name="IssuedTokenBinding">
          <security mode="TransportWithMessageCredential">
            <message clientCredentialType="Windows" establishSecurityContext="false" />
          </security>
        </binding>
      </ws2007HttpBinding>
    </bindings>
  </system.serviceModel>

通过将服务配置中的绑定更改为ws2007FederationHttpBinding而不是CustomBinding并更新我的客户端服务引用,解决了我的问题

<bindings>
  <ws2007FederationHttpBinding>
    <binding name="serviceBinding" receiveTimeout="05:00:00" sendTimeout="05:00:00">
      <security mode="Message">
        <message>
          <issuerMetadata address="http://localhost/MyCompany.SecurityTokenService/ActAsIssuer.svc/mex"/>
        </message>
      </security>
    </binding>
  </ws2007FederationHttpBinding>
</bindings>

因为我使用的是自签名证书,所以我必须在客户端配置中使用以下端点行为更改certificateValidationMode:

<behaviors>
  <endpointBehaviors>
    <behavior name="MyServiceBehavior" >
      <clientCredentials>
        <serviceCertificate>
          <authentication certificateValidationMode="PeerOrChainTrust"/>
        </serviceCertificate>
      </clientCredentials>
    </behavior>
  </endpointBehaviors>
</behaviors>

最后,我只需确保我的证书位于Trusted People store中,并在调用服务时获得正确的IClaimIdentity:)


希望这对其他人有所帮助,因为这让我有一段时间发疯了…

你能在这里分享服务配置和客户端配置吗…,就像你在网站上做的那样question@anilpurswani,不幸的是,与此相关的项目早已完成并移交,我再也无法访问代码。