我正在设计一个Erlang / OTP应用程序,它将通过RESTful API公开其服务(SOA)。
构成后端的服务将是数据库服务,价格计算服务等。
客户端可以有多种类型:Web客户端,移动客户端,Asterisk服务器客户端(需要在数据库服务中查找用户记录),甚至是我不打算拥有和不知道的客户端关于。客户端将以不同的方式使用RESTful API:一些将使用所有服务,一些将仅消耗一些服务(SOA方式)。
我所关注的主要问题是身份验证/授权。
我无法使用Ruby on Rails的内置身份验证/授权,因为Web客户端只是许多可能通过RESTful API使用该应用程序的客户端的一个客户端。
所以,我的问题是:
答案 0 :(得分:4)
只需检查其他人如何执行此操作,例如在本文中:Authentication on Facebook。
通常,我们的想法是客户端调用一个单独的API调用,以便向系统验证自身。系统可以接受任何客户端或仅接受已注册客户端列表。系统验证客户端后,会发出一个特殊令牌,客户端随后会在所有API调用中使用该令牌。在Facebook文档中,它被称为访问令牌。如果客户端尝试在没有有效令牌的情况下调用API,系统会将此报告为错误,并且在某些情况下可能会阻止客户端。
在REST中,令牌可以简单地作为URL中的另一个参数,POST中或直接在JSON中作为附加字段发送。将其作为POST或JSON发送可能是最好的,因为它可以保持URL清洁(并且不会与任何可能基于URL的缓存冲突)。
这是这个想法的优点,但通常需要考虑更多的事情。例如,令牌难以猜测,因此客户端无法在未经系统验证的情况下重新创建有效令牌。此外,如果在指定的时间段内没有调用API,系统可能需要使令牌失效。
要回答问题的最后部分,请指出一些图书馆: