无法使HTTPS MEX端点正常工作

时间:2012-06-11 13:30:54

标签: .net wcf wcf-binding wcf-security custom-binding

我一直在尝试配置WCF以使用Azure ACS。 此WCF配置有2个错误:

  1. 它不发布MEX终点。
  2. 它不会调用自定义 行为延伸。 (在我做了一些之后,它就停止这样做了 我不记得的变化)
  3. 这里可能出现什么问题?

    <configuration>
      <configSections>
        <section name="microsoft.identityModel"
                 type="Microsoft.IdentityModel.Configuration.MicrosoftIdentityModelSection, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </configSections>
      <location path="FederationMetadata">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
      <system.web>
        <compilation debug="true" targetFramework="4.0">
          <assemblies>
            <add assembly="Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
          </assemblies>
        </compilation>
      </system.web>
      <system.serviceModel>
        <services>
          <service name="production" behaviorConfiguration="AccessServiceBehavior">
            <endpoint contract="IMetadataExchange"
                      binding="mexHttpsBinding"
                      address="mex" />
            <endpoint address=""
                      binding="customBinding"
                      contract="Samples.RoleBasedAccessControl.Service.IService1"
                      bindingConfiguration="serviceBinding" />
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="AccessServiceBehavior">
              <federatedServiceHostConfiguration />
              <sessionExtension/>
              <useRequestHeadersForMetadataAddress>
                <defaultPorts>
                  <add scheme="http" port="8000" />
                  <add scheme="https" port="8443" />
                </defaultPorts>
              </useRequestHeadersForMetadataAddress>
              <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
              <serviceMetadata httpsGetEnabled="true" />
              <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceCredentials>
                <!--Certificate added by FedUtil.  Subject='CN=DefaultApplicationCertificate', Issuer='CN=DefaultApplicationCertificate'.-->
                <serviceCertificate findValue="XXXXXXXXXXXXXXX" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
        <extensions>
          <behaviorExtensions>
            <add name="sessionExtension"
                 type="Samples.RoleBasedAccessControl.Service.RsaSessionServiceBehaviorExtension, Samples.RoleBasedAccessControl.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
            <add name="federatedServiceHostConfiguration"
                 type="Microsoft.IdentityModel.Configuration.ConfigureServiceHostBehaviorExtensionElement, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
          </behaviorExtensions>
        </extensions>
        <protocolMapping>
          <add scheme="http" binding="customBinding" bindingConfiguration="serviceBinding" />
          <add scheme="https" binding="customBinding" bindingConfiguration="serviceBinding"/>
        </protocolMapping>
        <bindings>
          <customBinding>
            <binding name="serviceBinding">
              <security authenticationMode="SecureConversation"
              messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10"
              requireSecurityContextCancellation="false">
                <secureConversationBootstrap
                  authenticationMode="IssuedTokenOverTransport"
                  messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10">
                  <issuedTokenParameters>
                    <additionalRequestParameters>
                      <AppliesTo xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy">
                        <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
                          <Address>https://127.0.0.1:81/</Address>
                        </EndpointReference>
                      </AppliesTo>
                    </additionalRequestParameters>
                    <claimTypeRequirements>
                      <add claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" isOptional="true" />
                      <add claimType="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" isOptional="true" />
                      <add claimType="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" isOptional="true" />
                      <add claimType="http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider" isOptional="true" />
                    </claimTypeRequirements>
                    <issuerMetadata address="https://XXXXYYYY.accesscontrol.windows.net/v2/wstrust/mex" />
                  </issuedTokenParameters>
                </secureConversationBootstrap>
              </security>
              <httpsTransport />
            </binding>
          </customBinding>
        </bindings>
      </system.serviceModel>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
      </system.webServer>
      <microsoft.identityModel>
        <service>
          <audienceUris>
            <add value="http://127.0.0.1:81/" />
          </audienceUris>
          <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            <trustedIssuers>
              <add thumbprint="THUMBPRINT HERE" name="https://XXXYYYY.accesscontrol.windows.net/" />
            </trustedIssuers>
          </issuerNameRegistry>
          <certificateValidation certificateValidationMode="None" />
        </service>
      </microsoft.identityModel>
      <appSettings>
        <add key="FederationMetadataLocation" value="https://XXXYYYY.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml " />
      </appSettings>
    </configuration>
    

    编辑:进一步的实施细节 我有以下行为扩展元素(当前没有被调用)

     public class RsaSessionServiceBehaviorExtension : BehaviorExtensionElement
    {
        public override Type BehaviorType
        {
            get
            {
                return typeof(RsaSessionServiceBehavior);
            }
        }
        protected override object CreateBehavior()
        {
            return new RsaSessionServiceBehavior();
        }
    }
    

    配置中的命名空间和程序集是正确的。检查令牌验证涉及更多代码,但在我看来,至少应该发布MEX并调用CreateBehavior()以便我继续进行。

0 个答案:

没有答案