【问题标题】:Security in Web ApiWeb API 中的安全性
【发布时间】:2012-05-12 00:48:38
【问题描述】:

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

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

【问题讨论】:

    标签: security rest asp.net-web-api


    【解决方案1】:

    Dominick Baier 是该主题的权威,他的博客中有关于该主题的系列文章。请参阅系列的第一篇here

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


    更新

    我的客户如何知道他的令牌已过期

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

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

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

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

    • 直接调用(创建对象和调用方法)如果它在同一个盒子上
    • 使用HttpClient调用服务并使用数据

    【讨论】:

    • 非常感谢。它使事情变得更加清晰。当我谈论 ajax 调用时,我的意思是说从 asp.net 站点到 web api 服务的调用。显然在 js 代码中(在我的 aspx 页面上运行)即使用户登录到该站点,我也没有安全令牌来调用 Web api 服务。
    • 到目前为止我了解到的是web api继承了底层托管环境(本例中为asp.net)的Pricipal对象。可以从全局配置对象关闭此继承。如果用户代理不是网络浏览器,我的想法是转而继承。我想我已经说清楚了?你觉得这个想法有什么问题吗?
    • 感谢 Aliostad 的跟进。我几乎已经创建了一个消息处理程序来解决安全问题。我会把它放在网上的某个地方,让你看看。
    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    相关资源
    最近更新 更多