这些用户名和密码从何而来?如果您的网站已经实现了表单身份验证,那么您可以自己绕过设置凭据并使用表单身份验证 cookie。如果您的用户已登录,则 cookie 将随 Web 服务调用一起传播。为了在另一边阅读它,您需要进行一些更改。
首先,您需要在 system.ServiceModel 部分为 WCF 启用 ASP.NET 兼容模式:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
完成后,对于您想要了解 ASP.NET cookie 的每个服务方法,将 [AspNetCompatibilityRequirements] 属性添加到您的服务类
[ServiceContract]
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ExampleService
{
}
现在,在每个方法中,您都可以访问 HttpContext.Current.User.Identity 对象来发现用户的身份。
如果您只希望经过身份验证的用户调用某些方法,那么您可以使用 PrincipalPermission 因此
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Authenticated=true)]
public string Echo()
作为奖励,如果您使用 ASP.NET 的角色提供程序,那么这些也将被填充,然后您可以在方法上使用 PrincipalPermission 将它们限制为特定角色的成员:
[OperationContract]
[PrincipalPermission(SecurityAction.Demand, Role="Administators")]
public string NukeTheSiteFromOrbit()
这显然也适用于 Silverlight2。