WCF认证+授权

WCF authentication + authorization

我们有 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" 的用户只能发送他的用户 ID。验证他最好的技术是什么?

还有每个请求的 STATIC 变量(当前)是如何不同的。我们使用默认的 WCF instanceMode,它是……PerSession。那么如何为每个请求设置不同的静态变量。

每次请求都通过用户名在数据库中查询 userId 感觉很蹩脚。

It feels pretty lame to query database for userId by his username for each request.

我不同意。

为了提供安全的 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>