我想在现有的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中的某个位置。此外,我不是在寻找实现表单或基本身份验证的方法。我知道怎么做,但这不是我想要的。
答案 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)
最后我使用了三种方法,这些身份验证方法中的任何一种都可以在我的数据服务上正常工作: