【问题标题】:Authorization(not authentication) in SOA and RESTful ArchitectureSOA 和 RESTful 架构中的授权(不是身份验证)
【发布时间】:2023-03-26 15:05:01
【问题描述】:

我正在开发一个小型网络应用程序。它使一个会计流程自动化。

我起草了一个业务需求和一个 SOA 结构,但是由于我的限制,我不能更进一步,尤其是授权部分。

让我困惑的一件事是我应该使用 RESTful API 进行授权(而不是身份验证)吗? 还是我应该在后端进行授权(用户-> 角色-> 允许的操作),而不暴露此授权服务?

SOA + RESTful API 处理授权的最佳实践是什么?

真诚地, 尼古拉斯

【问题讨论】:

  • 您能否详细解释一下我是否应该使用 RESTful API 进行授权
  • 例如:每次调用其他服务API之前调用/authorize/{...},看看我是否有权访问资源,用户通过sessionID认证后。授权是这样的吗?
  • 您需要什么级别的授权?你需要阻止 API 吗?过滤数据(“行级安全”)?还有什么?

标签: yii soa restful-architecture


【解决方案1】:

如果我没有误解你的问题,我认为正确的是服务器的每个服务请求都可能返回访问错误(或无权访问资源的错误)或请求的结果。

在 JSON 中,服务器返回类似这样的内容

{
"status": "ko",
"error": {
    "number": "xx",
    "msg" ; "error you dont have right to access"
 }

}

如果没问题

{
"status": "ok",
"result": {
    ...
 }

}

【讨论】:

    【解决方案2】:

    REST API 的问题是您无法使用 session 登录用户。每次用户尝试访问受保护的资源时,他都需要在请求中发送一个标识他的令牌(我们使用令牌不在请求中发送密码)。

    因此,即使用户调用/authorize/{...} 方法,您也需要在调用其他方法时再次检查其凭据,因为没有登录状态。

    所以对我来说最好的方法是:

    1. 用户使用其用户名和令牌作为参数发送请求
    2. 在服务器端检查令牌是否有效(与用户名匹配且未过期)
    3. 如果令牌有效,那么用户就是他所说的那个人,因此您可以检查其权限(如果他有权访问资源)
    4. 如果他有权访问,那么您继续请求
    5. 否则,您会回复 HTTP 错误,例如 401(未经授权)

    【讨论】:

    • 我同意你的观点,黑暗继承人!非常感谢您的帮助!
    • 很高兴它有帮助!如果它解决了您的问题,那么您应该勾选答案以标记您的问题已解决!
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 2013-07-25
    • 2011-05-11
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多