2

我刚刚使用 apicontroller 创建了我的第一个休息服务。我将它与 Web 表单而不是 mvc-4 一起使用。我如何才能在 Web 服务中实现安全性。请记住,除了浏览器之外的客户端可能会使用服务,如何继续设置安全性。当我们从浏览器对使用表单身份验证的 asp.net 应用程序进行身份验证时,该应用程序返回一个身份验证 cookie,该 cookie 在每个后续请求中由浏览器转发,并且应用程序通过解密 cookie 知道用户已登录。
我正在看一个关于复数视力的教程关于 web api 的安全性。他们主张我们应该只有一个方法,如果传递 json 数据,就可以登录用户。登录后,该方法将向客户端(浏览器和其他服务客户端)返回身份验证 cookie,客户端应在每个后续请求中发送此 cookie 以授权自己。这种身份验证方案对于 Web 服务是正常的还是有其他推荐的方式?问题更多是关于实施什么而不是如何实施?

编辑:我从@AliOstad 对这个问题的回答中得到的想法是我应该为我的服务创建一个单独的登录方法,理想情况下应该在 https 上工作,并且这个方法应该返回一个加密的 auth 标头,包括用户的电子邮件和发布时间。一旦客户端获得了令牌,他就可以通过在 auth 标头中传递这个令牌(到 andriod 应用程序等)继续使用该服务,如果数据服务(而不是应该在 https 上工作的登录服务)是,我认为没有问题在 http 上运行,因为令牌将在 x 分钟后过期。在服务器端它完全没问题但是我的客户怎么知道他的令牌已经过期并且他需要在从数据服务获取数据之前去获取另一个令牌?我的第二个问题是,如果我以这种方式实现它,我将如何处理由 asp.net 应用程序(asp.net 应用程序)对数据服务进行的 ajax 调用。net 应用程序和 web api 在同一个应用程序上运行)。在那里(在 javascript 中),我需要身份验证令牌或用户名和密码来获取身份验证令牌,但它们似乎都不可行?
任何想法我应该如何处理这些情况?

4

1 回答 1

5

Dominick Baier 是该主题的权威,在他的博客中有关于该主题的系列文章。在此处查看该系列的第一篇。

我无法真正总结出一个明智的小答案,我认为您需要阅读这些帖子。


更新

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

与表单身份验证不同,当用户拥有过期令牌并重定向到登录屏幕时,Web API 与 HTTP 响应代码进行通信——因为客户端很可能是一台机器而不是人类用户。

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

我将如何处理由 asp.net 应用程序对数据服务进行的 ajax 调用

他们不会进行 AJAX 调用,他们会:

  • 如果在同一个盒子上,直接调用(创建对象和调用方法)
  • 使用 HttpClient 调用服务并使用数据
于 2012-05-02T14:41:36.377 回答