在使用IdP通过oauth2对用户进行身份验证的web应用程序中,实现用户权限(客户端和服务器端)的标准/推荐选项是什么?
通过“用户权限”,我指的是用户在应用程序中执行的操作。
例如,假设应用程序有一个"admin“页面,该页面用于管理应用程序的某些设置,只有特定用户才能进入。其中一些用户只允许查看当前设置,而其他用户也被允许更改设置(可能只允许其中一些设置)。
据我所知,oauth2中的“作用域”的概念可能用于实现这样的要求,因此,一个只允许查看“app:admin:view”页面的用户将具有一个app:admin:view作用域,而一个也可以编辑设置的用户将拥有一个app:admin:some-setting:edit作用域。
但是,在大多数大型身份提供者服务中,管理这些作用域及其分配给用户的任务似乎相当繁琐。
这是一个很好的解决办法吗?如果是这样的话,是否有任何产品/服务与oauth2国内流离失所者集成,帮助管理权限并将其分配给用户(例如,具有良好的直观UI)?如果没有,是否有任何既定的方法来处理这种情况?
发布于 2019-12-29 19:13:03
范围
我不会为此目的使用OAuth2范围。原因是,OAuth2作用域是为了限制应用程序对用户资源可以做什么,而不是限制用户在应用程序中可以做什么。
例如,如果我编写了一个web应用程序,向用户展示他们在Google文档中使用的语言,那么它需要从Google获得的权限来读取用户的Google文档,但不需要读取他们的日历。因此,应用程序将从Google获得一个OAuth2令牌,该令牌的作用域为读文档特权,而不是读日历特权或任何其他不必要的特权。
使用作用域来传递有关用户权限的信息(与应用程序权限相反)的具体缺点是,如果您想实现类似上述的功能,应用程序可以在应用程序中获得对用户资源的不同级别的访问,同时以多种方式使用OAuth2作用域可能会让人感到困惑。如果您希望通过API将应用程序中的功能公开给您的客户以集成到他们自己的应用程序中,这可能会成为一个问题。
OAuth2委托与OpenID连接身份验证
您刚才提到您正在使用OAuth2进行身份验证。OAuth2是用来授权的,不用于身份验证。OAuth2访问令牌不表示经过身份验证的用户。OpenId连接 ID令牌。
AWS认知用户组
我喜欢使用白兰地进行身份验证。它为您跟踪用户,因此您不需要用户数据库,并对它们进行身份验证。它与Google和Facebook等外部身份提供者集成在一起。对于跟踪不同类型用户的用例,可以使用认知群组。这里是一个有例子的博客文章。
基本上,您将从科尼图获得一个ID令牌,您的客户端或服务器可以读取ID令牌来确定用户的组(管理、常规用户等),并采取相应的行动。这里是从令牌读取组的一个示例。
https://stackoverflow.com/questions/59366200
复制相似问题