开发者

WCF Custom authentication - HTTP status 401: Unauthorized

WCF Service WebConfig(partial).

    <services>
          <service name="Bricks99.LicensingServer.LicensingService"
                   behaviorConfiguration="Bricks99ServiceBehavior">        
            <!-- use base address specified above, provide one endpoint -->
            <endpoint address=""
                      binding="basicHttpBinding"
                      bindingConfiguration="Bricks99Binding"
                      contract="Bricks99.LicensingServer.ILicensingService" />
            <!--<endpoint address="mex"
                      binding="mexHttpBinding"
                      contract="IMetadataExchange" />-->
          </service>
    </s开发者_JAVA技巧ervices>
    <basicHttpBinding>
            <binding name="Bricks99Binding">
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" />
              </security>
            </binding>
    </basicHttpBinding>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Bricks99.LicensingServer.CCustomValidatorClass, Bricks99.LicensingServer"/>
</serviceCredentials>

Client is ASP.NET 2.0

LicensingService service = new LicensingService();
            //Authentication            
CredentialCache credCache = new CredentialCache();
            credCache.Add(new Uri(service.Url), "Basic", new NetworkCredential("Test", "1234567"));
service.Credentials = credCache;
service.PreAuthenticate = true;
service.UseDefaultCredentials = false;
result = service.VerifyLicenseKey(licenseKey, string.Empty);

The result is always The request failed with HTTP status 401: Unauthorized. I have also turned off Anonymous Access on the folder. Its still not working. Any ideas on how to set the credentials correctly?

EDIT: Seems like the overridden method

public override void Validate(string userName, string password)
        {
            try
            {
                if(userName != "Test" || password != "1234567")
                {
                    throw new FaultException("The provided credentials are invalid.");
                }
            }
            catch(FaultException ex)
            {
                LicensingData.Operations.LogError(ex);                
            }
        }

is never getting hit.


Well after hours of research I found out that the hosting provider did not allow basic authentication by default. For custom authentication to work it is necessary that basic authentication be enabled in IIS.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜