Erlang / OTP:RESTful应用程序中的授权/身份验证

时间:2012-08-03 05:22:22

标签: rest erlang authorization restful-authentication otp

我正在设计一个Erlang / OTP应用程序,它将通过RESTful API公开其服务(SOA)。

构成后端的服务将是数据库服务,价格计算服务等。

客户端可以有多种类型:Web客户端,移动客户端,Asterisk服务器客户端(需要在数据库服务中查找用户记录),甚至是我不打算拥有和不知道的客户端关于。客户端将以不同的方式使用RESTful API:一些将使用所有服务,一些将仅消耗一些服务(SOA方式)。

我所关注的主要问题是身份验证/授权。

RESTful web application

我无法使用Ruby on Rails的内置身份验证/授权,因为Web客户端只是许多可能通过RESTful API使用该应用程序的客户端的一个客户端。

所以,我的问题是:

  • 典型的RESTful Web应用程序的身份验证/授权的一般概念是什么,预计会与许多不同的客户端一起使用?
  • RESTful Web应用程序中最实用的授权/身份验证软件设计模式是什么?
  • 您可以推荐哪些Erlang / OTP开源软件库来实现此类应用程序的身份验证/授权?

1 个答案:

答案 0 :(得分:4)

只需检查其他人如何执行此操作,例如在本文中:Authentication on Facebook

通常,我们的想法是客户端调用一个单独的API调用,以便向系统验证自身。系统可以接受任何客户端或仅接受已注册客户端列表。系统验证客户端后,会发出一个特殊令牌,客户端随后会在所有API调用中使用该令牌。在Facebook文档中,它被称为访问令牌。如果客户端尝试在没有有效令牌的情况下调用API,系统会将此报告为错误,并且在某些情况下可能会阻止客户端。

在REST中,令牌可以简单地作为URL中的另一个参数,POST中或直接在JSON中作为附加字段发送。将其作为POST或JSON发送可能是最好的,因为它可以保持URL清洁(并且不会与任何可能基于URL的缓存冲突)。

这是这个想法的优点,但通常需要考虑更多的事情。例如,令牌难以猜测,因此客户端无法在未经系统验证的情况下重新创建有效令牌。此外,如果在指定的时间段内没有调用API,系统可能需要使令牌失效。

要回答问题的最后部分,请指出一些图书馆:

  • erlang:phash2crypto库可用于生成难以猜测的唯一令牌
  • Webmachine作为一个优秀的框架,或者他们喜欢称之为REST工具包,在Erlang中创建REST接口
  • API调用背后的逻辑可以在Erlang中实现,并直接从Web服务器提供,例如:可以使用氮气或芝加哥老板这样的网络框架来实现。查看Erlang web frameworks
  • 的此列表