我正在实现一个安全的WCF服务.使用用户名/密码或Windows凭据进行身份验证.该服务托管在Windows服务进程中.现在,我正在尝试找出为每个服务操作实现授权的最佳方法.
例如,请考虑以下方法:
public EntityInfo GetEntityInfo(string entityId);
Run Code Online (Sandbox Code Playgroud)
您可能知道,在WCF中,有一个OperationContext对象,您可以从中检索调用方/客户端传入的安全凭据.现在,在调用方法的第一行时,身份验证已经完成.但是,如果决策取决于输入数据本身,我们如何实施授权?例如,在上述情况下,说'admin'用户(其权限等存储在数据库中),允许获取实体信息,不允许其他用户...我们在哪里进行授权检查?
假设我们把它放在方法的第一行,如下所示:
CheckAccessPermission(PermissionType.GetEntity, user, entityId) //user is pulled from the current OperationContext
Run Code Online (Sandbox Code Playgroud)
现在,有几个问题:
我们在授权检查之前验证entityId(例如检查null /空值等)还是INSIDE授权检查?换句话说,如果每个方法都应该包含授权检查,那么这是一个好的模式吗?哪个应该首先发生 - 参数验证或授权?
当授权检查遍布这样的地方时,我们如何对WCF服务进行单元测试,并且我们在单元测试中没有OperationContext!?(假设我试图在没有任何WCF设置的情况下直接测试这个服务类实现).
有什么想法吗?
我正在使用WCF服务和net.tcp端点,其serviceAuthentication的主要PermissionMode设置为UseWindowsGroups.
目前在服务的实现中,我使用PrincipalPermission属性来设置每个方法的角色要求.
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string method1()
Run Code Online (Sandbox Code Playgroud)
我尝试做的几乎完全相同,除了在app.config中设置角色的配置.有没有办法做到这一点,仍然使用Windows组身份验证?
谢谢
我正在整理一个WPF应用程序,该应用程序最终将使用WCF Web服务作为其数据源.
在原型设计阶段,我在SQL 2008数据库上使用LINQ to SQL,并开始欣赏我可以轻松地"添加新项| LINQ to SQL Classes"并为表生成模型类,然后说话使用LINQ将它传递给我的XAML UI,非常好.
但是当我们将数据源从SQL Server切换到WCF Web服务时会发生什么?为了继续使用LINQ,我将不得不:
感谢您在这里给出的任何方向.