【问题标题】:Dynamic WCF Service Contracts based on authentication credentials基于身份验证凭据的动态 WCF 服务合同
【发布时间】:2010-12-20 10:00:33
【问题描述】:

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

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

3) 根据凭据权限,WCF 服务应向客户端返回适当的接口(服务合同)

4) 客户端然后消费它。

例如假设我在服务器上有一个类,它定义了一个实体说“资产”,并有一些与它所有可能的操作相关的方法

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

 Edit()
 {
 ......
 }

 Flag()
 {
 ......
 }

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

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

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

例如

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

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

Interface IAssetForGeneralUser
{
 Flag();
}

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多