2012-05-02 181 views
2

我一直在使用apicontroller刚刚创建我的第一个休息的服务。我使用它与网页形式,而不是mvc-4。我如何去执行Web服务中的安全性。请记住,浏览器以外的其他客户可能会使用该服务,但人们会如何设置安全性。 当我们从针对正在使用表单认证的asp.net应用程序的浏览器验证自己,该应用返回其通过浏览器转发每个后续请求和应用知道用户通过解密该Cookie签署在认证的cookie。
我在看一个tutorial on plural sight有关Web API的安全性。他们主张,如果json数据通过,我们应该只有一个可以登录用户的方法。一旦登录,该方法会将auth cookie返回给客户端(浏览器和其他服务客户端),并且客户端应该在每个后续请求上发送该cookie以授权他们自己。这种认证方案对于Web服务来说是否正常或者还有其他推荐方式?问题在于如何实施而不是如何实施?安全的网络API

编辑:我从@ AliOstad的回答了这个question的想法是,我应该为我服务的一个单独的登录方法,应该在HTTPS理想的工作,这个方法应该返回一个加密的AUTH头,包括用户的电子邮件和发行时间。一旦客户端已经获得令牌,他可以继续通过传递此令牌身份验证头使用该服务(以Andriod的应用程序等),我看不出有什么问题,如果数据服务(而不是登录服务应在HTTPS工作)是在http上运行,因为令牌将在x分钟后过期。在服务器端,它完全正常,但是我的客户如何知道他的令牌已过期,并且在从数据服务获取数据之前需要获取另一个令牌?我的第二个担心是,如果我以这种方式实现它,我将如何处理由asp.net应用程序(asp.net应用程序和web API在同一应用程序上运行)制作的数据服务的ajax调用。有(在JavaScript中),我要么需要身份验证令牌或用户名和密码来获取身份验证令牌,他们都不可行?
任何想法我应该如何处理这些情况?

回答

5

多米尼克·拜尔在这方面的权威,并且对这个问题在他的博客的一个系列。请参阅系列的第一个here

我真的不能总结一个合理的答案小,我想你需要经过的职位。


UPDATE

我的客户怎么会知道他的令牌已过期

与窗体身份验证,当用户有一个过期的令牌,并重定向到登录界面,网页API与通信HTTP响应代码 - 因为客户机很可能不是人类用户。

所以客户端代理不知道它是否有一个过期的标记,而不是在连接时使用了过期的标记你的API,一个返回(未授权)响应。此时客户端将尝试获取新的令牌。

我该如何处理由asp制作的数据服务的ajax调用。净应用

他们不会让一个AJAX调用,他们将:

  • 直接呼叫(创建对象并调用方法),如果它是在同一个盒子
  • 使用的HttpClient致电该服务并使用该数据
+0

plz看看我的编辑 –

+0

非常感谢。它使事情变得更清晰。当我谈论ajax调用时,我的意思是说从asp.net网站到web api服务的调用。显然在js代码中(在我的aspx页面上运行),即使用户登录到站点,我也没有安全令牌来调用web api服务。 –

+0

到目前为止,我学到的是web api继承了底层托管环境(本例中为asp.net)的Pricipal对象。这种继承可以从全局配置对象中关闭。我的想法是,如果用户代理只是一个Web浏览器,那么就是继承。我想我已经清楚了?你觉得这个主意有什么问题吗? –