WCF 4.0 REST用户名密码验证

NVM*_*NVM 7 wcf restful-authentication wcf-security wcf-rest

我一直在使用ASP.Net成员资格/角色提供程序在WCF 4.0 RESTfull服务中使用用户名/密码身份验证/授权.

花了两天时间试图找到大多数人都同意的东西,我放弃了.很多混乱似乎是因为专门针对WCF 4.0的信息很少.

有人可以善待

  1. 给出一个关于WCF 4.0 + REST是否是一个好主意的权威观点?
  2. 概述了执行此操作(或链接)的普遍接受的步骤.
  3. 提供完成此操作所需的相当完整的代码示例.

编辑:赏金的人谁可以为用户提供用户名/密码认证和授权使用WCF服务应用程序模板在VS 2010中一个问题的REST WCF服务4.0的完整样本(甚至只是一个完整样本的链接).

Flo*_*scu 10

我认为您的问题的答案取决于您的服务的目的和将要使用它的应用程序的类型.

如果您有一个现有的ASP .Net应用程序,并且您希望将其部分功能公开为RESTfull服务,您可以使用AJAX来使用客户端,那么WCF可能不是最佳选择.在这种特殊情况下,您已经在Web应用程序中拥有了一个身份验证用户,并且您希望在AJAX调用期间传播该身份验证.实现这一点实际上非常简单.

ASP .Net Forms身份验证基于身份验证Cookie,该身份验证Cookie在成功登录后生成并传递给浏览器.从浏览器到应用程序在同一域中的任何URL进行的每次调用都将包含身份验证cookie.在ASP .Net MVC中,您可以简单地将您的服务方法实现为需要授权的Controller操作,一切都将在幕后发生.

在经典的ASP .Net中,您可以使用PageMethods来实现您的服务方法,并且将再次为您在场景后发送和验证cookie(此处此处的PageMethods示例).

另一方面,如果您的服务将在浏览器之外使用(例如从桌面或移动应用程序),那么WCF可能确实是实现该服务的正确工具.但是,ASP .Net表单身份验证不是实现安全性的最佳选择.REST服务的主要目的是简化,以便客户可以在每个平台上轻松实现,而ASP .Net表单身份验证的基于cookie的机制并不是最直接的.

OAuth是一种协议,专门用于在Web服务环境中进行用户身份验证.它的第二个版本仍处于草稿中(在此处查找规范),但很可能这是您要使用的版本,因为它比OAuth 1.0简单得多.Facebook已经在OAuth 2.0上实现了API身份验证(详情请参见此处),您可能希望检查其实现是否具有灵感.

除了用户身份验证之外,OAuth还确保消费应用程序(服务客户端)身份验证,并确保用户永远不会直接在客户端应用程序中输入其凭据.如果这实际上需要的太多,您可以创建一个受OAuth 2.0启发的自定义实现.

首先,您需要通过HTTPS公开您的服务,以便加密服务和客户端之间的所有通信.其次,您需要在服务中创建一个登录方法,如下所示:

string Login(string user, string password);
Run Code Online (Sandbox Code Playgroud)

成功登录后,上述方法将返回一个身份验证令牌.然后将在所有其他方法上使用和验证身份验证令牌.例如:

Employee[] GetAllEmployees(string authToken)
{
  // verify token here

  // return data if user authenticated by token
}
Run Code Online (Sandbox Code Playgroud)

在上面的体系结构中,authToken与ASP .Net表单身份验证中的身份验证cookie具有相同的作用,但它作为简单参数传递.您将负责实现生成令牌的算法(它们必须足够长且唯一,使用此处的算法)以及存储和验证它们.


Muh*_*han 2

WCF Web Api 使编写 WCF Rest 服务变得非常容易,但它也有局限性。对于身份验证,您需要使用WCF Rest Contrib

如果您希望最大限度地控制服务设计,那么您应该求助于 ASP.NET MVC 并为每个服务方法编写控制器方法。