目前我的应用程序基于角色和权限验证用户的访问。例如,如果用户是管理员,则具有所有权限。
然而,现在我正在实施OAuth 2.0和OpenIdConnect,为Web应用程序和REST API提供单点登录和令牌验证。
OAuth 2.0和OpenID Connect对于访问控制非常依赖于范围(scope)。诸如account.write、account.read和account.delete等范围(scope)非常类似于权限“CanCreateAccount”、“CanReadAccount”、“CanDeleteAccounts”、“CanAssignRolesToPermissions”。
我不明白两者之间的区别。这种分离迫使我的应用程序在访问REST API时检查客户端的范围,并单独检查用户的权限。我认为这导致了代码重复。
我想知道OAuth 2.0的范围和应用程序权限是否相同?如果是这样,那么我应该只坚持使用范围(scope)而不是维护单独的应用程序权限吗?
例如,当前用户被分配到一个角色中,而角色具有权限。如果我用范围(scope)替换权限,那么我就不必重复客户端/用户范围(scope)/权限检查功能。
你可能会想,为什么不将权限替换为范围(scope)。那是因为我想坚持使用OAuth 2.0规范,而范围(scope)在整个规范中都被使用。