具有混合客户端的WCF授权令牌

时间:2011-08-10 14:05:02

标签: wcf authorization token

我正在为一个应用程序开发一些WCF服务,这些服务不仅可以被我们的Web应用程序使用,而且还可以从我们的客户端内部应用程序中获取。由于我们不知道客户端内部应用程序可能处于什么环境,因此我们将采用最不常见的分母路径。

我们将拥有一个将返回令牌的身份验证服务,该令牌将作为每个方法调用的第一个参数传递。我的问题是,我想要一种干净的方法来检查令牌,而不必将对令牌检查逻辑的调用作为每个服务方法中的第一行代码。

我看过在BeforeCall方法中实现一个参数检查器,这在我的第一个概念证明中效果很好,但我不喜欢的是抛出一个异常让消费者知道令牌无效。我的所有方法都将返回一个至少包含2个基本属性的结果 - 成功和错误消息列表。我希望只返回inavlid令牌信息作为结果的错误消息之一,因为对我而言,无效令牌不是例外,它是一种验证,但我没有看到一种透明的方式来实现这一点。

我几乎将参数检查器的AfterCall方法返回值,但允许该方法执行。

所以我认为我有两个选择 -     1 - 将一个令牌检查调用作为每个方法的第一行,它将填充我的返回结果对象     2 - 在参数检查器中抛出一个例外情况,这真的不是那么糟糕。

有没有人找到一个好办法呢?

谢谢, 保罗

1 个答案:

答案 0 :(得分:0)

我真的认为你应该重新考虑这种方法。每个堆栈都能理解soap标头,即使这个人正在构建XML字符串。只是不要像消息安全那样做任何事情,就互操作而言你应该没问题。

如果您仍想使用此路线,则可以编写自定义IParameterInspector,您可以使用行为将其附加到服务。然后只需覆盖BeforeCall方法并在那里检查令牌。