首页 文章

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

提问于
浏览
4

我正在设计一个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 回答

  • 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的这个列表 .

相关问题