我们有WCF 4.5服务,我们正在努力保护它。
我们的数据库模式中有用户,但是我们要做的是进行如下操作
[OperationsContract]
void PostMessage(string message, int userId)
//used ID is supposed to be id of user who post message我们的服务使用具有基本授权的basicHttpsBinding进行保护。我可以通过以下方法获得访问该方法的用户的用户名:
ServiceSecurityContext.Current.PrimaryIdentity.Name但是我如何将他的数据库Id添加到PrimaryIdentity中。换句话说,如何验证,他的用户名为"John“的用户只能发送他的userId。验证他的最佳技术是什么?
另外,对于每个请求,静态变量(当前)是如何不同的。我们使用默认的WCF instanceMode,它是.PerSession。因此,对于每个请求,如何可能有不同的静态变量。
用userId的用户名为每个请求查询数据库感觉很糟糕。
发布于 2015-02-20 13:29:59
用userId的用户名为每个请求查询数据库感觉很糟糕。
我不同意。
为了提供安全的WCF服务,我将检查每个请求的凭据。一种方法是创建自定义UserNamePasswordValidator并重写Validate方法。您还应该将Web.config配置为使用自定义验证器。
<behaviors>
<serviceBehaviors>
<behavior name="GeneralBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WCFApp.UserNamePassValidator, WCFApp" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>https://stackoverflow.com/questions/28628948
复制相似问题