RESTful WCF数据服务身份验证

时间:2010-06-14 20:33:11

标签: asp.net-mvc wcf authentication routing wcf-data-services

我想在现有的ASP.NET MVC网站上实现REST api。我已设法设置WCF数据服务,以便我可以浏览我的数据,但现在的问题是如何处理身份验证。

现在,数据服务通过网站的内置表单身份验证得到保护,从AJAX表单访问服务时就可以了。但是,它不适合RESTful api。

我希望作为表单身份验证的替代方法,用户只需将用户名和密码嵌入到Web服务的URL中或作为请求参数。

例如,如果我的网络服务通常可以作为

访问
http://localhost:1234/api.svc

我希望能够使用网址

访问它
http://localhost:1234/api.svc/{login}/{password}

所以,我的问题如下:

  • 这是一种理智的方法吗?

  • 如果是,我该如何实现?

似乎可以轻松重定向GET请求,以便将登录名和密码附加为GET参数。我也知道如何检查http上下文并使用这些参数来过滤结果。但我不确定是否/如何将相同的方法应用于POST,PUT和DELETE请求。我可以在POST,PUT和DELETE请求中使用GET参数吗?

编辑:我的问题是如何将登录名和密码嵌入到Web服务的URL中,以便我可以对Web服务执行POST,PUT和DELETE请求。我知道如何在Web服务运行后实现身份验证,并且登录/密码包含在HTTPContext中的某个位置。此外,我不是在寻找实现表单或基本身份验证的方法。我知道怎么做,但这不是我想要的。

4 个答案:

答案 0 :(得分:0)

我不必使用restful via身份验证,但我必须确保用户组有权访问其余服务。这是我通过传递给Web服务的MD5令牌(这是一个普通的JSON服务,而不是WCF包装器)。基本上,我“知道”允许哪些网站访问我的服务,所以我给他们自己的API密钥(为简单起见,这是一个域名的MD5。这是通过对urlreferrer的过滤器检查传入的,如果MD5的话它匹配,然后它就是一个去。

我知道这不是身份验证的答案,但如果您只需要一个非常课程级别的“身份验证”,那么这是一种中等信任的方法。

我有兴趣看看其他人如何做到这一点,对于其他项目,我可能需要一种不那么粗略的认证方法。

答案 1 :(得分:0)

OData - WCF Data Services Best Practices from TechEd - Meta-Me - Site Home - MSDN Blogs

<system.web.extensions>
  <scripting>
    <webServices>
       <authenticationService enabled="true" />
    </webServices>
  </scripting>
</system.web.extensions>

这个怎么样?

答案 2 :(得分:0)

看看以下答案是否有助于您:

你的第一个问题:

  • 这是一种理智的方法吗?

      
        

    如果您的服务是通过https运行的,我没有看到任何使用此方法的问题。

      
  • 如果是,我该如何实现?

  
    

您可以在其他方法中使用GET参数,例如。流在这里传递。

  
[OperationContract]
        [WebInvoke(Method="POST", UriTemplate = "UploadFile/{fileName}/{userToken}")]
        string UploadFile(string fileName,string userToken,Stream fileContents);

答案 3 :(得分:0)

最后我使用了三种方法,这些身份验证方法中的任何一种都可以在我的数据服务上正常工作:

  • 使用API​​密钥作为密码的基本身份验证
  • 通过嵌入为请求标头的API密钥进行身份验证
  • 基于URL的身份验证,使用API​​密钥作为API的路径。我用代理ASP.NET MVC控制器实现了这个。