2 Stimmen

Benutzerdefinierte WCF-Authentifizierung - HTTP-Status 401: Nicht autorisiert

WCF-Dienst WebConfig(teilweise).

    <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>
    </services>
    <basicHttpBinding>
            <binding name="Bricks99Binding">
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" />
              </security>
            </binding>
    </basicHttpBinding>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="Bricks99.LicensingServer.CCustomValidatorClass, Bricks99.LicensingServer"/>
</serviceCredentials>

Der Client ist 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);

Das Ergebnis ist immer Die Anfrage ist mit dem HTTP-Status 401: Unauthorized fehlgeschlagen. . Ich habe auch den anonymen Zugriff auf den Ordner deaktiviert. Trotzdem funktioniert er nicht. Haben Sie eine Idee, wie ich die Anmeldeinformationen richtig einstellen kann?

EDIT: Es scheint, dass die überschriebene Methode

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);                
            }
        }

ist, nie getroffen zu werden.

2voto

Aseem Gautam Punkte 17517

Nun, nach stundenlanger Recherche fand ich heraus, dass der Hosting-Anbieter es nicht erlaubt Basisauthentifizierung standardmäßig. Damit die benutzerdefinierte Authentifizierung funktioniert, muss die Basisauthentifizierung im IIS aktiviert sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X