【发布时间】:2013-10-02 20:31:51
【问题描述】:
我正在实施一个安全的 WCF 服务。使用用户名/密码或 Windows 凭据完成身份验证。该服务托管在 Windows 服务进程中。现在,我正在尝试找出为每个服务操作实施授权的最佳方式。
例如,考虑以下方法:
public EntityInfo GetEntityInfo(string entityId);
您可能知道,在 WCF 中,有一个 OperationContext 对象,您可以从中检索调用者/客户端传入的安全凭据。现在,身份验证在方法中的第一行被调用时已经完成。但是,如果决定取决于输入数据本身,我们如何实施授权呢?例如,在上述情况下,假设“管理员”用户(其权限等存储在数据库中)被允许获取实体信息,而其他用户不应该被允许......我们将授权检查放在哪里?
假设我们将它放在方法的第一行,如下所示:
CheckAccessPermission(PermissionType.GetEntity, user, entityId) //user is pulled from the current OperationContext
现在,有几个问题:
我们是在授权检查之前还是在授权检查内部验证 entityId(例如检查 null/空值等)?换句话说,如果授权检查应该包含在每个方法中,这是一个好的模式吗?哪个应该首先发生 - 参数验证或授权?
当授权检查无处不在,而我们在单元测试中没有 OperationContext 时,我们如何对 WCF 服务进行单元测试!? (假设我正在尝试直接测试此服务类实现,而无需任何 WCF 设置)。
各位有什么想法吗?
【问题讨论】:
标签: c# .net wcf authorization