【问题标题】:Storing a username & password for a REST API in a web app session在 Web 应用会话中存储 REST API 的用户名和密码
【发布时间】:2013-10-26 01:07:56
【问题描述】:

我们已经构建了一个 REST API。该 API 已构建并运行,并对每个请求使用基本身份验证。

我们现在希望构建其他使用 REST API 的 Web 应用程序。但是,我们在解决如何在 Web 应用中进行身份验证时遇到了问题。

理想情况下,我们希望 Web 应用程序显示一个登录页面,并且用户将输入他们的 REST API 凭据。问题在于,一旦用户“登录”到 Web 应用程序,Web 应用程序如何以及在哪里存储输入的凭据,记住它需要存储它们才能提交REST API 需要发出任何进一步请求时的凭据。

现代网络浏览器必须做类似的事情,不是吗?当我们在浏览器中访问 REST API 时,它会要求我们输入用户名和密码一次,但后续请求会重新提交我们之前输入的凭据。我们如何在 Web 应用程序中复制它?我假设将它们存储在会话中是个坏主意...?

-- 编辑

可能值得指出的是,对 REST API 的请求将从服务器发出,因此不希望将它们存储在客户端。

【问题讨论】:

    标签: security rest asp.net-mvc-4 authentication basic-authentication


    【解决方案1】:

    我认为您可能做错了。如果您有一些业务要求在每个请求中提交用户名和密码,那么您可能应该找到提出要求的人并非常努力地与他们交谈。根本没有理由。这就是会话的用途。

    您只对用户进行一次身份验证。身份验证后,您给该用户一个会话。您不再需要进行身份验证,因为会话会告诉您用户是谁。

    让用户在每个请求中都输入他们的凭据会惹恼他们的生活。将其存储在客户端(在 cookie 或本地存储中)是有问题的,并且具有严重的安全隐患。在所有情况下,每个请求都通过网络发送用户名/密码对(虽然理论上通过 https 是安全的)只是一个坏主意。这几乎是会话的标志性用例,使用它们。

    【讨论】:

    • 但是 REST API 的全部意义在于它是无状态的吗?通过添加一个会话,你不是让它成为有状态的并且打败了拥有一个 RESTful API 的任何一点......?
    • @dark_perfect 您将“无状态”概念推得太远了。身份验证/授权通常不是 REST 服务的重点。这是一个先决条件。这就是为什么添加到 REST 服务的安全性通常在不同的层/库中实现,而 REST 服务只是在用户通过身份验证后调用该层来验证用户的身份和权限。
    • 会话似乎不是要走的路。 ASP.Net Web API(这是构建 REST API 所使用的)甚至不是为支持会话而设计的。
    • 将用户名和密码存储在网站会话中会被认为是不好的做法吗?它仍将存储在服务器端,但还有另一个节点知道凭据,所以我想它的安全性略低。在这种情况下,也许最好使用 SecureString 对象?
    • 但是在这种情况下,服务器需要知道这两个,对吧?在不知道两者的情况下,它怎么能向 REST API 发出任何请求?
    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2013-12-27
    • 2019-09-02
    • 1970-01-01
    • 2014-11-30
    相关资源
    最近更新 更多