我在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
时,我没有看到任何经过身份验证的用户。
我做错了什么?
弗雷德里克
答案 0 :(得分:1)
您需要启用ASP.Net兼容性才能通过HttpContext访问身份:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
这个问题的答案提到了另一种方法:How to access HttpContext.Current.User.Username in WCF service