0

I have a WCF service I'm hosting in IIS6. I'm trying to set up custom username/password authentication using Transport level security. I've set up a test certificate and got a client to connect over SSL with no authentication specified, i.e:

      <security mode="Transport">
        <transport clientCredentialType="Basic" />
      </security>

I've set up a custom validator with Message security and client credential type "UserName", but I'd like to incorporate this now with Transport level security. When I have my web.config set, when I try to view the WSDL, I get an error: "Security settings for this service require 'Basic' Authentication but it is not enabled for the IIS application that hosts this service."

Here are the important parts of my web.config:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="UserNameBinding">
          <security mode="Transport">
            <transport clientCredentialType="Basic" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="ServiceAuthenticationBehavior"
        name="Service.WebServices.MyService">
        <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration=""
          name="mexBinding" contract="IMetadataExchange" />
        <endpoint binding="wsHttpBinding" bindingConfiguration="UserNameBinding"
          name="wsHttpBindingWithAuth" contract="Service.WebServices.IMyService" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceAuthenticationBehavior">
          <serviceMetadata httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceCredentials>
            <serviceCertificate findValue="TestCert01" storeLocation="LocalMachine"
              storeName="TrustedPeople" x509FindType="FindBySubjectName" />
            <userNameAuthentication userNamePasswordValidationMode="Custom"
              customUserNamePasswordValidatorType="Service.WebServices.ClientCredentialsValidator, Service.WebServices" />
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>

Is there something I'm supposed to set in IIS6 to enable this? In IIS, I started initially with the "Enable anonymous access" option enabled. I also tried enabling "Basic authentication (password is sent in clear text)" checkbox, but no success.

4

1 に答える 1

0

この投稿は、サードパーティのソリューションを使用して、基本は Windows アカウントでのみ使用できることを示唆しているようです...

Windowsアカウント以外へのWCF RESTサービスによる基本認証?

私はここに来て、うまく機能する1-legged openauthに行き着きました。

この投稿を編集すると、解決策への道が開けましたhttp://www.cleancode.co.nz/blog/523/oauth-dot-net

1-leg OAuth と 2-leg OAuth の違いに言及する価値があります。1 レグは、クライアントとサービスの両方が、認証要求 (すべてクエリ文字列に追加される) の暗号化と復号化に使用されるクライアントのアカウント名のクライアントの秘密 (パスワード) を知っている場所です。2-legged の場合、これは google、facebook などのサード パーティによって生成されます。

于 2012-04-17T13:28:14.670 に答える