【问题标题】:Is possible to create a role based application with OAuth2?是否可以使用 OAuth2 创建基于角色的应用程序?
【发布时间】:2019-12-11 06:45:40
【问题描述】:

我要做的是创建一个带有 Angular 前端和带有 OAuth2 身份验证的 Spring Boot 后端的应用程序。

问题是我不知道如何访问 ROLES 用户拥有的前端,这样我就可以在页面上显示一些基于角色的内容。
是的,有OAuth 在响应中提供的范围,但问题是这些范围适用于 CLIENT,而不适用于特定的 USER 本身。而那个 CLIENT 是我的前端(如果我错了,请纠正我),这基本上意味着每个操作我的应用程序(客户端)的用户都将具有相同的范围(角色)。
此外,我可以在后端指定角色在SpringUserDetailsService 的帮助下,然后将这些角色与@PreAuthorize 等一起使用。但不是在前端。

举个例子,如果我只使用单个 JWT,然后使用令牌本身,我会将用户名和角色都返回到前端。然后我可以存储这些数据并根据我的需要在前端使用它。

所以我要问的是这是否真的可行,这样做是否正确? 我怎么可能实现这样的行为?

【问题讨论】:

标签: java angular spring spring-boot oauth-2.0


【解决方案1】:

OAuth 不能解决这个问题,最好通过 API 中的声明来解决。 OAuth 应该只处理身份验证。我下面的帖子可能会帮助您考虑最佳分离:https://authguidance.com/2017/10/03/api-tokens-claims/

简而言之,您必须在 OAuth 处理完成后查找用户权限,例如角色。

【讨论】:

  • 非常感谢。会通读你的文章。是的,我有一个问题。经过一点额外的研究,我发现OAuth2中除了范围之外还有权限。我想知道区别,唯一描述区别的页面是this one。但我并没有完全得到解释。如果您可以在此处重申已接受的答案或对差异给出您自己的解释 - 请,这绝对是很棒的。
  • @ThomasAndolf 我刚刚在我的消息中提供了相同的链接。想听其他解释或重述已接受的答案。
  • 客户端本身有一定的规则。假设网络浏览器可以调用某些服务并更新某些内容,而移动应用程序有权调用其他服务。这通常通过使用范围来调节。您可以根据客户端读取某些地方并写入其他地方。另一方面,用户有权做某些事情,而其他用户是不允许做的。如示例所述,用户可能能够更新某些内容,但 twitter 不能。
【解决方案2】:

YouTube 上有来自 Spring 开发者的 a great video 关于 OAuth2/OpenID Connect。它展示了如何使用最新的 Spring Security 5 解决方案来实现资源服务器。

实现这一点的最简单和最好的方法可能是使用 OpenID Connect 服务器,该服务器将提供所有用户管理内容。市场上有很多解决方案。 Auth0 和 Okta 是身份云,只需少量资金即可提供服务。另一方面,您有 Keycloak,这是一个可以安装在 Docker 甚至裸机上的服务器 - 它是免费和开源的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 2011-03-21
    • 1970-01-01
    • 2010-12-24
    • 2013-03-06
    • 1970-01-01
    • 2018-07-06
    • 2017-11-26
    相关资源
    最近更新 更多