基于 REST 的 Web 应用架构的身份验证

Posted

技术标签:

【中文标题】基于 REST 的 Web 应用架构的身份验证【英文标题】:Authentication for a REST based web app architecture 【发布时间】:2013-06-17 06:12:45 【问题描述】:

我需要帮助来设计我的网络应用程序。我想做一个需要身份验证的 REST Web 服务,以及一个访问此 Web 服务以获取数据的 Web 应用程序。所有用户都存储在外部数据库中(如 openldap、活动目录或其他)。

 _____________        __________________
|             |      |                  |
|   web app   |----->|   REST service   |
|_____________|      |__________________|

                      _______________
                     |               |
                     |    user db    |
                     |_______________|

问题是:我需要在web app和web service上进行认证,还是web app可以通过web service验证登录?

希望我的问题可以理解

编辑:澄清情况:我的网络服务是独立的,任何类型的应用程序都可以访问它(如网络应用程序、智能手机应用程序、curl 等)。 我认为我的问题也需要澄清。我想知道是否可以在服务中创建所有身份验证逻辑。我想像这样的事情:

    应用使用 HTTP 基本身份验证查询资源 http://mywebservice.com/login 如果凭据有效,则响应将类似于"loginStatus":true,如果无效,则响应为false

这是一个可能的解决方案吗?安全吗?

【问题讨论】:

REST 服务是否计划为任何可以访问 REST 服务主机的用户都可以访问的独立服务,或者它是某种 Web 应用程序的中间件/后端? 是的,服务计划是独立的 我想了解的是:是否只能通过 WEB 接口(Web 应用程序)访问其余服务返回的数据,还是任何授权都可以查询通过 rest 服务 api 获取原始数据(例如使用 curl:curl -H "Accept:application/json" http://mywebapp.example.net/rest/myresource?start=1&end=99999999)。 是的,任何类型的应用程序都可以访问它,而不仅仅是网络应用程序 首先你应该看看***.com/questions/4608225/…。第二件事是您必须考虑如何保存/验证身份验证令牌以及在访问您的网络服务时如何传递它。 【参考方案1】:

第一件事......“我需要在Web应用程序和Web服务上进行身份验证,还是Web应用程序可以通过Web服务验证登录?” ......两者都是可能的......取决于您的选择和实施。但是为了在所有情况下使流程统一以使用 DB,来自 Web 应用程序的调用应该转到 Web 服务,如图所示。我认为在登录时,客户端应该调用 Web 应用服务器,并且 Web 应用调用 Web 服务来查看数据库以检查凭据。

有很多方法。有时网络应用会大量使用 AJAX,他们会从客户端本身直接调用 REST 服务来获取数据或检查凭据。

【讨论】:

感谢您的回答。我想我会按照你的建议通过网络服务来做所有事情。感谢@andih 的帮助,我在 cmets

以上是关于基于 REST 的 Web 应用架构的身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Intranet API 的 REST 身份验证缓存

Django REST 用户创建/身份验证

为 web 应用程序使用的 python REST API 选择适当的身份验证类

使用 REST 的用户身份验证

基于表单的登录,同时也应用 REST 原则

Django REST 的 JSON Web 令牌不会向用户数据库进行身份验证