Restful WCF и базовая аутентификация через Fidder - PullRequest
1 голос
/ 05 марта 2012

Я создал веб-сервис отдыха WCF. Однако клиент запросил, чтобы служба была заблокирована с помощью базовой аутентификации, но позволила ему представить токен авторизации при первом ответе, а не по запросу. К сожалению, у меня есть только IIS 6 на моей тестовой машине

Мне действительно нужно только симулировать базовую аутентификацию, поэтому я делаю это поверх анонима и выкидываю ошибку, если токен авторизации неверен. Однако токен аутентификации недоступен для WCF

http://localhost/test.svc/get/token/

Тип содержимого: application / x-www-form-urlencoded

Авторизация: Basic Base64Value

Если я удалю анонимного и добавлю базовый в IIS. Все, что я получаю, это 401. Я полагаю, что в IIS выполняется аутентификация перед WCF.

В идеале я хотел бы просто получить анонимный доступ и иметь доступ к заголовку авторизации.

Как мне получить заголовок аутентификации

1 Ответ

1 голос
/ 05 марта 2012

Ваше предположение о том, что это проблема IIS 6, вероятно, верно.

Я только что создал службу WCF "xxx.svc" и разместил ее в IIS (7.5), и когда я запросил ее с помощью fiddler2 с правильным заголовком авторизации, он не отправил HTTP 401.

Я опубликую свой код, чтобы вы протестировали его на IIS 6. Если он все еще дает вам HTTP 401, то это, безусловно, проблема IIS 6, если не попытаться сравнить и сопоставить ваш код с моим и посмотреть, какие конфигурации отличается.

web.config:

<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBindConfig">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic" proxyCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="MyTestSvc.MyService">
        <endpoint address="http://localhost/TestBasicAuth/Service1.svc" behaviorConfiguration="webHttpEndpointBehavior"
          binding="webHttpBinding" bindingConfiguration="webHttpBindConfig"
          name="webHttpBindingEndpoint" contract="MyTestSvc.IMyService" />
        <host>
          <baseAddresses>
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webHttpEndpointBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

Service1.svc

<%@ ServiceHost Language="C#" Debug="true" Service="MyTestSvc.MyService" CodeBehind="Service1.svc.cs" %>

IService1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MyTestSvc
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IMyService
    {

        [OperationContract]
        [WebGet(UriTemplate=@"/Hello")]
        string GetData();

    }
}

и наконец: Service1.svc.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MyTestSvc
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class MyService : IMyService
    {
        public string GetData()
        {
            WebOperationContext webCtx = WebOperationContext.Current; 
            IncomingWebRequestContext incomingCtx = webCtx.IncomingRequest; 
            string hdrVal = incomingCtx.Headers["Authorization"]; 

            return string.Format("Authorization: {0}", hdrVal);
        }
    }
}

Fiddler Результаты: Fiddler Composer request

fiddler inspector, request/response raw

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...