首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF认证+授权

WCF认证+授权
EN

Stack Overflow用户
提问于 2015-02-20 12:24:10
回答 1查看 108关注 0票数 0

我们有WCF 4.5服务,我们正在努力保护它。

我们的数据库模式中有用户,但是我们要做的是进行如下操作

代码语言:javascript
复制
[OperationsContract]
void PostMessage(string message, int userId) 
   //used ID is supposed to be id of user who post message

我们的服务使用具有基本授权的basicHttpsBinding进行保护。我可以通过以下方法获得访问该方法的用户的用户名:

代码语言:javascript
复制
ServiceSecurityContext.Current.PrimaryIdentity.Name

但是我如何将他的数据库Id添加到PrimaryIdentity中。换句话说,如何验证,他的用户名为"John“的用户只能发送他的userId。验证他的最佳技术是什么?

另外,对于每个请求,静态变量(当前)是如何不同的。我们使用默认的WCF instanceMode,它是.PerSession。因此,对于每个请求,如何可能有不同的静态变量。

用userId的用户名为每个请求查询数据库感觉很糟糕。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-20 13:29:59

用userId的用户名为每个请求查询数据库感觉很糟糕。

我不同意。

为了提供安全的WCF服务,我将检查每个请求的凭据。一种方法是创建自定义UserNamePasswordValidator并重写Validate方法。您还应该将Web.config配置为使用自定义验证器。

代码语言:javascript
复制
<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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28628948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档