gpt4 book ai didi

WCF + 用户凭据

转载 作者:行者123 更新时间:2023-12-04 17:59:38 25 4
gpt4 key购买 nike

我正在开发 Silverlight v3 Web 应用程序,我想保护对我用来获取数据的 WCF 服务的访问。我目前让 WCF 工作得很好,但它不需要任何用户凭据。

我对 WCF 的这方面不是很有经验,所以我的第一个想法是为我的每个服务操作添加用户名和密码参数。我遇到的问题是,这将需要大量冗余代码,而且用户名和密码将以纯文本形式通过网络传输。

我想要的是一种在创建服务代理后立即在客户端指定凭据的方法(我正在使用从“添加服务引用”自动生成的代理)。

在谷歌上搜索解决方案后,我只能找到与我的第一个想法(使用用户名/密码参数)类似的解决方案。有人可以指出我正确的方向吗?

谢谢!

最佳答案

这些用户名和密码来自哪里?如果您的网站已经实现了表单例份验证,那么您可以自己绕过设置凭据并使用表单例份验证 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。

关于WCF + 用户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1146262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com