动态WCF服务合同基于身份验证凭据

时间:2010-12-20 10:00:34

标签: wcf

1)我希望客户端应用程序添加对WCF服务的引用

2)客户端应用程序应该能够向此WCF服务发送凭据

3)基于凭证权限,WCF服务应将适当的接口(服务合同)返回给客户端

4)客户然后消费它。

e.g。假设我在服务器上有一个类,它定义一个实体说'资产',并且有一些与之相关的所有操作相关的方法

Class Asset
{
 Add()
 {
 .....
 }

 Edit()
 {
 ......
 }

 Flag()
 {
 ......
 }

 Deploy()
 {
 ........
 }
}

现在我的客户端应用程序想要对“资产”执行某些操作。但我不想将整个类DLL提供给客户端。而是想只给出界面。哪个客户端可以使用它并在其上调用适当的操作。

现在问题是客户端应用程序添加对WCF服务的引用。如何根据其WS *或身份验证凭据将Asset类的适当接口返回给客户端。 .Net 4.0是否提供了动态创建和返回服务合同的简单方法?

e.g。

//following is pseudo code
If(Current.User.Role == 'Admin')
{
 return IAssetsForAdmin;
}
else
{
 return IAssetsForGeneralUser;
}

Interface IAssetForAdmin
{
 Add();
 Edit();
 Flag();
}

Interface IAssetForGeneralUser
{
 Flag();
}

1 个答案:

答案 0 :(得分:1)

这是不可能的。您不能为每个用户角色返回不同的合同。此外,它不仅与WCF相关,而且与整个Web服务体系结构和.NET体系结构相关,因为定义新契约=定义新服务引用=重新编译应用程序。

但这可以通过基于角色的安全性轻松解决。经过身份验证的用户将成为某个角色的成员,该角色将被允许仅执行选定的操作。要实现此目的,请谨慎使用PrincipalPermission(对于命令式权限要求)或PrincipalPermissionAttribute(对于声明性权限请求)。如果未经授权的用户调用安全方法,则会抛出SecurityException。您唯一需要的是正确配置WCF安全模型,以便将角色分配给经过身份验证的用户。