【问题标题】:Conflicting notions of authorization when implementing an App with Oauth使用 Oauth 实现应用程序时的授权概念冲突
【发布时间】:2012-09-05 13:43:22
【问题描述】:

这主要是措辞问题。但尽管这是一个非常重要的问题,它可能会导致对更大团队维护的大型代码库的误解。假设我们有一个带有身份验证系统的非常基本的 CRUD/RESTful 应用程序。在这种情况下,尝试完成数据更改请求(POST/PUT)的经过身份验证的用户将被服务器识别(身份验证),然后检查该识别用户是否有权创建/更新资源问题(授权)。

现在假设我将实现 Oauth 协议以在稍后阶段支持某种 Web API 解决方案。在这种情况下,来自客户端应用程序 A 的用户必须向资源提供者请求 授权 才能执行某些操作。

所以到目前为止,我们在同一个应用程序中有两个有效的授权概念。在应用程序级别这不是什么大问题,因为我们可以将这两个概念包含在相关的命名空间中,但在数据库中,我有两个有效的候选者 不能 共享名称 authorizations

由于我不是命名空间表名称的忠实拥护者,因此我想就可能重命名其中一个表名(或者您可能已经实施的其他一些疯狂的解决方案)提出建议。

欢呼

【问题讨论】:

  • 为什么 OAuth 授权和服务器授权不能只是一个单独的 DB 表?
  • OAuth 授权授予外部应用程序授权的外部用户对主应用程序中资源所有者的资源执行任何操作。服务器授权授予主应用程序授权的用户对地图应用程序中的资源执行任何操作。
  • 因此,除了处理所有 Oauth 协议内容之外,Oauth 授权还与它所指的客户端应用程序耦合。 “简单”授权只是对主应用程序上某些操作的过滤(例如检查用户是否有权编辑资源)。将它们放在同一个表中有点过分,因为“简单”授权不需要 Oauth 授权要求的很多内容。

标签: web-applications oauth authorization oauth-2.0 crud


【解决方案1】:

oauthgrants 或者只是在 authorizations 前面加上更具描述性的名称?: user_authorizationsapp_user_authorizations。这可能会违反您关于命名空间的规则,但会更具描述性。

user_authorizationsauthorizations 将只是允许用户在系统内执行的操作。

app_user_authorizationsoauthgrants 将拥有用户通过 OAuth 授予第三方应用程序的权限。它将存储:用户 ID、OAuth 2.0 客户端 ID、授予的范围、刷新令牌(如果存在)、到期(如果存在)。它还可能具有访问令牌,具体取决于您实现它们的方式(或者它们可能在另一个表中或未存储,因为它们是可加密验证的)

【讨论】:

  • 我喜欢“授予”这个词。我认为这正是我需要解决的问题。不用说,正如你所说,前缀正是我想要避免的。所以我会坚持应用程序的“授权”和 oauth 工作流程的“授权”,它们似乎是足够好的独立概念。没有什么比向以英语为母语的人询问单词的确切含义更有趣了:)
猜你喜欢
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多