2013-06-20 119 views
0

这里客户端认证方式登录瓶一起的情况是:与RESTful服务

我们使用烧瓶在网站服务器web应用程序development.Also,我们举办一个RESTful服务。我们使用Flask-login作为身份验证工具,用于Web应用程序访问和RESTful服务(从浏览器访问Restful服务)。

后来,我们发现,我们需要,也,访问来自客户端调用(蟒蛇)的REST风格,所以没有会话和饼干等,这为我们提供了有关RESTful服务的当前认证头疼。

在网络上,存在大量的方法来保护来自客户端调用的RESTful服务。但对于他们来说,与我们目前的Flask登录工具一起生活似乎并不是一个简单的方法,因此我们不需要更改我们的Web应用程序。

因此,这里有一个问题:

有没有一种简单的方法(框架),所以RESTful服务可以支持同时多种验证方法(协议)。这是一个很好的做法吗?

非常感谢!

回答

0

所以,你已经正式遇到了现代Web开发中最困难的问题之一(我的愚见):Web认证。

下面是它背后的理论(我会在短时间内回答你的问题)。

当您构建的复杂应用程序拥有超过一些用户时,特别是如果您正在构建同时拥有网站和API服务的应用程序时,无论您身在何处,都会碰到身份验证问题,重新做。

解决这些问题的理想方法是在您的网络上进行独立的身份验证服务。某种内部API,专门处理用户创建,编辑和删除。有许多的好处,这样做:

  • 你有你所有的应用程序组件可以使用一个单一身份验证源:你的网站可以用它来记录人们在幕后,你的API服务可以使用它以验证API请求等。
  • 你有一个单一的服务,它可以巧妙地管理用户缓存 - 这是非常危险的实现用户缓存到处都是(这是通常发生在你处理多重身份验证时方法:你可能会缓存用户的API服务,但无法缓存他们的网站,这样的东西会导致问题)。
  • 你有一个单独的服务,可以独立扩展你的其他组件。这样想一想:比其他任何应用程序的数据访问更多?在大多数应用程序中,它是用户数据。对于每一个请求,用户数据都是需要的,这会对数据库/缓存/你正在做的事情造成压力。拥有管理用户的单一服务使您可以轻松地扩展这部分应用程序堆栈。

总的来说,认证真的很难。

在过去两年中,我一直是OpenCNAM的首席技术官,而且我们遇到了同样的问题(一个网站和API服务)。为了正确处理身份验证,我们最终构建了如上所述的内部身份验证服务,然后使用Flask-Login通过网站处理用户身份验证以及通过API对用户进行身份验证的自定义方法(只需对我们的身份验证进行HTTP调用即可)服务)。

这工作真的很适合我们,并让我们从成千上万的请求的规模数十亿(通过隔离在我们的堆栈的每个组件,并专注于用户身份验证作为一个单独的服务)。现在

,我不建议这对于那些没有很多用户的应用程序是非常简单的,或应用程序,因为它是更多的麻烦比它的价值。

如果你正在寻找一个第三方解决方案,Stormpath看起来非常有前途的(它只是谷歌)。

无论如何,希望有所帮助!祝你好运。