WCF 4.0是否有模拟类/模块/ WCF REST Starter Kit的RequestInterceptor?
答案 0 :(得分:7)
我回来了。
我碰巧重视代码中的简单性,在成功解决了这个问题之后,我不能说我更喜欢它,而不是查询字符串方法。将一个调用放入调用AuthN方法和AuthZ方法的每个服务端点似乎比有些人想象的要容易。
无论如何,有足够的意见......对解决方案。我们在这个链接上的解决方案就在Stackoverflow上,但在我们的上下文中没有很好地描述...所以我将在这里找到示例代码的“user634119”: Headers in 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>
接下来创建一个类(在上面的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
}
}
接下来创建一个Authentication类:
// 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
}
}
在Authenticate方法中,使用HttpRequestMessageProperty提取请求标头详细信息并执行我在第一个回复中描述的相同3个步骤。
答案 1 :(得分:4)
Eduardo,你问:@carlosfigueira:我可以用它来实现身份验证子系统吗?
我正在研究同样的问题,并且至少有一个解决方案(如下所述)和即将推出的基于授权标题的解决方案(我相信你正在考虑“拦截”)。
保护基于WCF 4 REST WebHttp编程模型的端点的最简单方法是:
现在,更好的方法是使用HTTP授权请求标头来存储这3个字符串,并让全局拦截器进程监视所有请求。这样可以防止没有认证块的暴露端点的可能性(好吧,至少它可能不太可能)。
使用查询字符串来携带所有这些信息的问题是查询字符串的最大长度为2k(因客户端/浏览器而异),调试时查询字符串很难读取...但只是习惯了它
有些人认为更复杂的方法是使用STS模型,您需要客户端将这3个身份验证字符串传递给安全令牌服务端点。响应消息将传回会话令牌,客户端将在每次调用时传入该会话令牌以代替3个字符串。确实,对于客户端,不需要在每次调用时生成HMAC哈希签名,但是服务器端仍然必须验证令牌,并且会话概念会破坏干净的RESTful无状态行为。
我会尽力发布实现查询字符串和auth标头方法的代码块。
答案 2 :(得分:3)
没有任何内容可以将1-1映射到它,但是您可以使用WCF核心中的IDispatchMessageInspector来实现RequestInspector将执行的大多数方案。 http://blogs.msdn.com/b/carlosfigueira/archive/2011/04/19/wcf-extensibility-message-inspectors.aspx上的帖子提供了有关信息检查员的一些详细信息。