不WCF4.0有一个模拟舱/模块/无论WCF其余的入门工具包的RequestInterceptor?

有帮助吗?

解决方案

没有任何映射1-1的任何映射到它,但您可以使用WCF核心的IdispatchMessageSpector实现RequestIspector将要做的大多数方案。帖子在 http://博客.msdn.com/b/carlosfigueira/archive/2011/04/19/19/wcf-extorys-message-inspectors.aspx 有一些关于消息检查员的详细信息。

其他提示

我回到了更新。

我碰巧在代码中重视简单,并且在成功解决此问题之后,我不能说我更喜欢它多于查询字符串方法。将单个呼叫丢弃到每个服务端点,伴随着Authz方法似乎比有些人可能相信的更容易。

无论如何,足够的意见......解决方案。解决方案是正确的,在此链接上的Stackoverflow下方,但在我们的背景下没有很好地描述...所以我将为这里找到的示例代码提供“User634119”的信用: 标题在OperationContext中 首先,我们需要向我们的web.config文件添加一个servicebehavior:

<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceAuthenticationManager serviceAuthenticationManagerType="WCF.BasicAuthorization, WCF"></serviceAuthenticationManager>
      <serviceAuthorization impersonateCallerForAllOperations="false" principalPermissionMode="Custom" serviceAuthorizationManagerType="WCF.BasicAuthentication, WCF">
      </serviceAuthorization>
    </behavior>
  </serviceBehaviors>
</behaviors>
.

next make:serviceBehaviors块中引用的课程(称为BasicAuthorization):

//Authorize the call against the URI resource being requested...
public class BasicAuthorization : ServiceAuthorizationManager
{
    public override bool CheckAccess(OperationContext operationContext, 
    ref Message message)
    {
        //some code
    }
}
.

next制作身份验证类:

// Authenticate the header signature as described in my previous post
public class BasicAuthentication : ServiceAuthenticationManager
{
    public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
        ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, 
        ref Message message)
    {
        //some code
    }
}
.

在验证方法中,使用httprequestmessageproperty将请求头详细信息拉出并执行我第一次回复中描述的相同的3个步骤。

爱德华,你问:@carlosfigueira:我可以用它来实现一个身份认证系统?

我的工作上,同样的问题,并有至少一个解决方案(如下所述)为你和一个即将到来的授权标题一(我相信是你在想的"拦截").

最简单的办法,以确保WCF4其余WebHttp编程模型基于端点是这样的:

  1. 问题的一个共同的秘密钥和API关键每个客户使用,作为凭据。API关键是真的相同的用户名。
  2. 运行的所有endspoints SSL保证你总是有道/信息/数据安全
  3. 需要的客户使用的共用秘密生成HMAC-SHA1(或当量)的散列签名字符串中包括一个时间戳和他们的API关键。
  4. 要求客户将所有3的这些作为查询参数字符串 在每一个请求:
  5. 在你的服务方面,实施一种认证方法,需要所有3弦,然后:
    • 看起来API关键和返回的客户共享的秘密 你的 已在一个数据库或其他地方。
    • 比较的时间戳止日期时间。现在,以确保请求不超过15分钟的老抵御重的攻击。
    • 使用这3个字符串,重新创建的签名字符串和比较你到一个过在的客户。
    • 如果它们匹配,请求方是真实的。

现在,更好的方式来做到这一点是通过使用HTTP授权请求头储存的那些3串并有一个全球拦截上下的进程的看所有请求。这将防止潜在的暴露端点没有一个认证块(嗯,至少它的可能性较小或许).

问题与使用的查询串开展所有这些信息查询串具有2k最大的长度(变化的客户机/浏览器)和查询串变得真的很难读时调试...但是,仅仅获得用到它。

一些认为一个更复杂的方式做到这一点的是STS模型,其中你要求客户来通过这3个身份验证串到一个安全标服务的终点。响应消息会通过后一届会议标记的客户将通过在每个呼吁在替代的3串。这是真的,对客户没有必要产生一个HMAC哈希上的签名的每一个电话,但是服务器方仍然必须进行认证的标记和本届会议的概念,犯规了清洁宁静的无国籍行为。

我将尽我最后码块,实现这两个查询串并且认证标题的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top