【问题标题】:Designing Token Based Authorization Server Request/Response设计基于令牌的授权服务器请求/响应
【发布时间】:2017-09-30 01:03:20
【问题描述】:

我们服务中的身份基于存储在数据库中的令牌。这是由客户端通过使用用户名和密码登录来获取的。

每次请求资源时,我们计划验证令牌并确定用户是否有权访问该资源。

我们的服务是单独部署的,可以通过HTTP访问授权服务器。

授权请求的最佳实践/常用方式是什么?

使用请求的权限和角色发送令牌

我正在考虑将令牌与角色一起传递,并在令牌验证请求中向授权服务器请求用户的权限。

{
 token: 'xyz',
 role: 'ROLE_ADMIN',
 permission: 'SAVE_USER'
}

并回复:200 表示成功,401 表示无效令牌,403 如果他们没有被授权使用权限。

仅发送授权请求中的令牌

考虑的另一种方法是仅将令牌验证请求中令牌中的令牌发送到授权服务器。

{
 token: 'xyz'
}

并以用户拥有的所有权限和角色进行响应:

{
 roles: ['ROLE_ADMIN', 'ROLE_USER'],
 permissions: ['SAVE_USER', 'DELETE_USER', 'SHOW_USER']
}

其中哪些更可取? 或者有没有我可以考虑的其他/模式方法?

【问题讨论】:

  • 如果您使用 Spring MVC,我认为最好使用 Spring OAuth。它已经通过向您发送随机 uuid(作为令牌)来处理基于令牌的身份验证,而实际信息将存储在数据库中。因此,每当您尝试使用该令牌访问资源时,spring 将针对该令牌检查角色/权限并相应地验证用户
  • @Afridi 我目前没有使用 OAuth。是否建议使用 Spring OAuth 进行非 OAuth 身份验证/授权?

标签: security design-patterns spring-security access-token http-token-authentication


【解决方案1】:

当您谈论“服务”时,这意味着您的服务很可能更愿意在请求它之前知道它可以做什么。

例如,您可能希望在请求到达之前突出显示用户可以点击的那些按钮。

所以我认为第二种方法会很好。在将请求传递给服务器时,将执行第一种方法,例如。用户想要删除一些东西,但它没有足够的访问权限,所以得到一个 403。

谈到安全性,在您描述的两种方式中,都有足够的检查,例如。在第一个中,当用户要求执行某些操作时,它会在执行之前进行检查,这就是应该做的。

【讨论】:

  • 只是确认一下,这是授权服务请求的正常方式吗?
  • @froi 你指的是哪一个?每个请求都发送令牌?我相信是的,是的。许多著名的服务都使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多