Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何在oauth2身份验证之上实现用户权限_Security_Oauth 2.0_Permissions_Authorization_User Permissions - Fatal编程技术网

Security 如何在oauth2身份验证之上实现用户权限

Security 如何在oauth2身份验证之上实现用户权限,security,oauth-2.0,permissions,authorization,user-permissions,Security,Oauth 2.0,Permissions,Authorization,User Permissions,在使用oauth2通过IdP对其用户进行身份验证的web应用程序中,实现用户权限(客户端和服务器端)的标准/推荐选项有哪些 “用户权限”指的是允许或不允许用户在应用程序内执行的操作。 例如,假设应用程序有一个“admin”页面,用于管理应用程序的一些设置,只有特定的用户才能进入。其中一些用户仅允许查看当前设置,而其他用户也允许更改设置(可能仅允许部分用户) 据我所知,oauth2中的“范围”概念可能用于实现这样的需求,因此,例如,仅允许查看“管理员”页面的用户将拥有app:admin:views

在使用
oauth2
通过IdP对其用户进行身份验证的web应用程序中,实现用户权限(客户端和服务器端)的标准/推荐选项有哪些

“用户权限”指的是允许或不允许用户在应用程序内执行的操作。
例如,假设应用程序有一个“admin”页面,用于管理应用程序的一些设置,只有特定的用户才能进入。其中一些用户仅允许查看当前设置,而其他用户也允许更改设置(可能仅允许部分用户)

据我所知,oauth2中的“范围”概念可能用于实现这样的需求,因此,例如,仅允许查看“管理员”页面的用户将拥有
app:admin:view
scope,而还可以编辑设置的用户将,拥有
app:admin:some设置:编辑
范围。
但是,在大多数大型身份提供者服务中,管理这些作用域以及将其分配给用户的任务似乎相当繁琐

这是一个好的解决方案吗?如果是这样,是否有任何产品/服务可以与oauth2 IDP集成,并帮助更轻松地管理权限及其分配给用户(比如说,具有良好的直观UI)?如果没有,是否有处理此类场景的既定方法?

范围 我不会为此目的使用。原因是OAuth2作用域用于限制应用程序可以使用用户资源做什么,而不是限制用户可以在应用程序中做什么

例如,如果我编写了一个web应用程序,向用户展示他们在谷歌文档中使用的语言,那么它需要谷歌授予的权限来阅读用户的谷歌文档,而不是阅读他们的日历。因此,应用程序将从Google获得一个OAuth2令牌,该令牌的作用域是read Docs特权,而不是read calendar特权或任何其他不必要的特权

使用作用域来携带有关用户权限(与应用程序权限相反)的信息的具体缺点是,如果您想要实现上述内容,应用程序可以在应用程序中不同程度地访问用户的资源,试图以多种方式同时使用OAuth2作用域可能会令人困惑。如果您希望通过API向客户公开应用程序中的功能以集成到他们自己的应用程序中,这可能会成为一个问题

OAuth2委托与OpenID连接身份验证 您提到您正在使用OAuth2进行身份验证。OAuth2用于授权。OAuth2访问令牌。ID代币可以

AWS Cognito用户组 我喜欢使用身份验证。它为您跟踪您的用户,因此您不需要用户数据库,并处理对他们的身份验证。它与谷歌和Facebook等外部身份提供商集成。对于跟踪不同类型用户的用例,可以使用Cognito。这是一篇带有示例的博客文章


基本上,您将从Cognito获得一个ID令牌,您的客户机或服务器可以读取该ID令牌,以确定用户组(管理员、普通用户等),并相应地采取行动。是从令牌读取组的示例。

OAuth2实现中的授权服务器返回JWT(作为访问令牌)。您可以让授权服务器在某些自定义“声明”中返回用户访问信息。SpringSecurityOAuth2支持这一点。有一个教程

但是,如果用户有一长串访问信息,使得JWT大小超过4KB,您将无法将令牌存储在cookie中(正如我在其他答案和中所解释的,cookie通常被用作并被视为在客户端存储令牌的安全选项)。在这种情况下,您可以拥有一个单独的微服务,该服务将返回给定用户名的用户访问信息,并且您可以在其他服务中本地缓存该信息