使用Web API进行RESTFul身份验证

时间:2013-04-04 01:15:04

标签: authentication asp.net-web-api single-page-application

我有一个使用WebAPI构建的Web服务,它接受JSON请求并相应地响应。核心架构已构建,但没有任何身份验证/授权。

经过大量的谷歌搜索和示范项目,我不知道从哪里开始。我发现了2008年和2009年的大量资料,但没有为WebAPI /单页应用程序提供大量最新的指南/工作流程。我认为工作流程应该如下:

  1. 检查用户是否已登录:如何使用javascript完成此操作?我是否将cookie发送到我的webAPI?如果是这样,我是否将该cookie作为参数发送到请求正文中?

  2. 让用户登录/注册:这些数据如何加密/解密?当然我不能通过线路发送密码......这是SSL进来的地方吗?

  3. 让他们访问他们有权访问的内容:我想我得到了这个 - 我可以在每个请求的基础上在控制器中进行授权。

  4. 任何信息都会很棒。

2 个答案:

答案 0 :(得分:8)

基本上,您需要基于令牌的身份验证或授权。 如果您指的是ASP.NET WebAPI,以下项目将是一个很好的起点: http://thinktecture.github.com/Thinktecture.IdentityModel.45/

即使您没有使用ASP.NET WebAPI,以下视频也是关于如何在RESTful Web服务上提供身份验证/授权的精彩介绍: http://vimeo.com/43603474

回答你的一些问题:

  

检查用户是否已登录:如何使用javascript完成此操作?我是否将cookie发送到我的webAPI?如果是,我是否将该cookie作为参数发送到请求正文中?

您可以使用cookie但我通常使用标头以避免常见的XSRF攻击。每当从浏览器发送http请求时,都会自动包含Cookie。

  

这是SSL进来的地方吗?

是。如果您要继续使用基于令牌的方法,可以使用单独的服务器(Identity Server)为您进行身份验证。

答案 1 :(得分:3)

JavaScript客户端是唯一的。您是否拥有Web API以及在同一域中提供JavaScript的页面?如果没有,您有相同的原始政策限制。如果您拥有托管网页和Web API的相同Web应用程序,则可以使用表单Authn。在这种情况下,您不需要自己从JavaScript发送包含身份验证票证的cookie。浏览器为您做到这一点,这是XSRF问题的原因。您必须小心JavaScript发送最终用户不应该知道的凭据。如果JavaScript知道某些东西,任何智能终端用户都可以获得这些知识。 OAuth 2.0隐式授权可能是一个不错的选择。最终用户在授权服务器中输入凭证(密码),授权服务器发出访问令牌。 JavaScript获取令牌并将其呈现给Web API,但它永远无法访问凭据。