我目前正在开发后端基础架构,我可能需要一些建议。
首先,这是当前的全局架构:
- 我在 IIS 中托管了 WCF 服务
- 我在 SQL Server 上托管了多个数据库。
ClientData
每个客户端一个数据库和一个全局MasterDatabase
. MasterDatabase
包含与连接字符串关联的凭据的映射。该数据库允许我ClientData
根据提供的凭据使用适当的数据库(通过实体框架)。- 我正在使用基于 SSL 的基本身份验证。
checkAccessCore()
凭据验证是在我的子类中的重写方法中完成的ServiceAuthorizationManager
。在该方法中,我 fetchMasterDatabase
确保凭据正确(使用 Bcrypt 将密码保存在 DB 中)并检索连接字符串。- 检索到连接字符串后,我将创建一个
CustomIdentity
继承自GenericIdentity
. 使用该实例,我可以设置Thread.CurrentPrincipal
属性。 - 每个 WCF 服务实现都会从中检索连接字符串
CustomPrincipal
,以便从相应的ClientData
数据库中获取数据。
我的问题/想法如下:
如果我决定在我的 WCF 服务中使用并发,我将如何处理它,因为这
CheckAccessCore
是一种强制并发操作按顺序运行的 WCF 扩展方法?http://support.microsoft.com/kb/KbView/2907010
这意味着我的所有呼叫都将在该
checkAccessCore
级别排队和阻塞。覆盖
checkAccessCore
是我发现在调用堆栈早期拦截调用以验证用户凭据的最佳方法。除了通过自定义身份之外,我是否应该使用不同的方式来传输客户端连接字符串?它安全吗?
如果我使用并发,我猜设置到的身份CustomPrincipal
将被覆盖。如果是,如何处理?