在Umbraco内托管自定义WCF服务并进行身份验证

时间:2013-02-10 08:22:41

标签: wcf authentication umbraco membership-provider

我在Umbraco中创建了一个自定义WCF服务。该服务位于Service文件夹中,似乎工作正常(我可以调用它并且响应相应)。现在,我希望用户在调用服务时进行身份验证。

为此,我已将这些行添加到web.config

<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
 <bindings>
  <webHttpBinding>
    <binding name="RaceManBinding">
      <security mode="None" />
    </binding>
  </webHttpBinding>
</bindings>
<services>
  <service name="RaceManagerAdmin.RaceManDataService" behaviorConfiguration="RaceManBehavior">

    <endpoint address=""
              binding="webHttpBinding"
              contract="System.Data.Services.IRequestHandler" />
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="RaceManBehavior">
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"
                                membershipProviderName="UmbracoMembershipProvider" />
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>
</system.serviceModel>

当我的服务被调用时,它应该使用Umbraco成员资格提供程序来验证用户。

我的客户通过创建网络凭证对象来实现此目的,如下所示:

var a = new RaceEntities(new Uri("http://localhost:40406/umbraco/Webservices/RaceManDataService.svc")) { Credentials = new NetworkCredential("admin", "secret") };

当我检查HTTPContext.Current时,我没有看到任何经过身份验证的用户。

我做错了什么?

弗雷德里克

1 个答案:

答案 0 :(得分:1)

您需要启用ASP.Net兼容性才能通过HttpContext访问身份:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>

这个问题的答案提到了另一种方法:How to access HttpContext.Current.User.Username in WCF service