0

我有一个 Rails 4 应用程序。我使用devise进行身份验证,使用oppro为我的 API 提供 oauth2。所有请求都通过权威政策授权,直到现在,这个设置完全没问题。

目前,我的授权始终基于每个用户完成。这是有道理的,因为通常每个请求都是代表特定用户完成的,该用户要么在会话中进行身份验证,要么提供 oauth-token。

新的挑战是:我有某些 API 消费者(从现在开始我称他们为设备),他们的请求不能被视为来自特定用户的请求。一种是可以与 API 交换信息的Asterisk Server,另一种是GPS Tracking Box,它不断将跟踪点推送到 API。

因此,我需要在每个设备的基础上授权某些 API 操作,这意味着不一定有current_user可用的。但是没有current_user搞砸我的授权概念。

我已经考虑了解决这个问题的几种方法:

  • 为每个设备创建专用用户并授权他们执行特定操作
    • 亲:不会搞砸我的授权计划
    • 对比:意味着重新考虑User-Model,因为目前我只有需要姓名、生日、电子邮件等的“自然用户”
  • 使用经过调整的授权方案创建专用控制器
    • 亲:高灵活性
    • 相反:
      • 所需设备的身份验证
      • 需要额外的 API 端点,感觉不是很干燥

我正在为这种情况寻找最佳实践方法。我相信这不是一个特别的问题,并且必须有很好的解决方案。

4

1 回答 1

0

You need a separate layer that does the authorization check as well as global attributes called caller_id and caller_type (these are just examples).

You then want to implement a logic e.g.:

  • if caller_type == device and caller_id == ... then
  • if caller_type == user and caller_id == ... then

To do that you can just custom-code your own little class. Alternatively you could use XACML to define your authorization logic. See this blog post which applies XACML to servlets. The same principle could be done for your Rails application.

HTH, David.

于 2014-07-04T06:45:06.357 回答