通过WCF REST服务中的标头进行身份验证

时间:2015-12-15 22:30:01

标签: c# wcf rest

我是WCF服务的新手,目前正在测试。

我有一个REST API,它有几种方法。其中一些需要用户上下文(会话),而另一些则不需要。登录时,每个用户都会获得一个会话令牌。客户端应通过HTTP标头在每个请求上提供此令牌及其用户ID。

目前,我编写了一种方法来获取这两个标头并验证会话,在每个需要用户上下文的方法上调用它。如果API变大,这似乎有点讨厌。

这样做有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以利用以下解决方案:

  1. 自定义类分别为客户端和服务派生IClientMessageInspector / IDispatchMessageInspector 。然后将其实例添加到MessageInspectors。使用messageInspector的优点是它应用于单个端点,因此无论暴露多个端点(SOAP和REST),messageInspector都只能与单个端点关联。无论何时接收或发送消息,分别调用AfterReceive或BeforeSent方法。在那里你检索标题,如果标记与任何预期不匹配,你可以抛出异常。这样的出路提供了暴露合同和背景检查之间的分离,例如令牌验证。
  2. 自定义类派生 IOperationInvoker 。在自定义操作调用程序中,您显式调用方法,并且由于它,您可以在任何方法被调用之前检查标头(OperationContext.Current.IncomingMessage)。

    我只提出了概念,广泛的信息和例子可以在互联网上查找。