Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
Api KeyClope授权服务可为数十个用户的数十个资源提供服务_Api_Oauth 2.0_Permissions_Authorization_Keycloak - Fatal编程技术网

Api KeyClope授权服务可为数十个用户的数十个资源提供服务

Api KeyClope授权服务可为数十个用户的数十个资源提供服务,api,oauth-2.0,permissions,authorization,keycloak,Api,Oauth 2.0,Permissions,Authorization,Keycloak,我目前正试图弄清楚KeyClope授权服务器所提供的功能是否是保护我的应用程序所需要的 所以我有一个PythonRESTAPI,它有(保持简单)作业对象,可以创建、修改、删除等等(通常的CRUD内容)。 到目前为止,API完全不受保护,我们需要一些身份验证才能上线。 我决定使用KeyClope,因为它已经在我们公司安装好了,并使用OAuth2授权代码流和OIDC连接后端和前端到授权服务器 因此,现在用户可以登录到web应用程序客户端,然后使用访问令牌来处理Python后端。 授权过程运行良好,令

我目前正试图弄清楚KeyClope授权服务器所提供的功能是否是保护我的应用程序所需要的

所以我有一个PythonRESTAPI,它有(保持简单)作业对象,可以创建、修改、删除等等(通常的CRUD内容)。 到目前为止,API完全不受保护,我们需要一些身份验证才能上线。 我决定使用KeyClope,因为它已经在我们公司安装好了,并使用OAuth2授权代码流和OIDC连接后端和前端到授权服务器

因此,现在用户可以登录到web应用程序客户端,然后使用访问令牌来处理Python后端。 授权过程运行良好,令牌得到验证,我甚至想出了如何获取作用域并在后端验证它们

现在我阅读了关于授权服务的内容,我想知道我是否可以使用它来控制/映射哪个作业属于哪个(keybeapt)用户。像这样:

/api/job/job-nr-1   <-> user-id-5 (create, delete, etc)
/api/job/job-nr-1   <-> user-id-1 (read-only)
/api/job/job-nr-2   <-> user-id-3 
...
/api/job/job-nr-1 user-id-5(创建、删除等)
/api/job/job-nr-1用户id-1(只读)
/api/job/job-nr-2用户id-3
...
如果我理解正确,每个作业都将是一种资源,用户可以做的事情(创建、删除等)将是作用域

但实际上是否有可能将每个作业映射到一个用户? 是否需要为每个作业用户关系设置策略,以允许一个(且仅一个)用户编辑此作业? 这可以通过API实现吗?作业是动态创建的,所以我自己不能通过管理UI来完成


所有这些听起来都很有用,我想知道KeyClope是否是管理这些权限/关系的合适地方,或者我是否应该为这些权限/关系设置一个单独的数据库。

动态授权几乎总是使用范围之外的声明:

您的场景

感觉您需要类似于以下内容的属性/声明来实现授权,其中一些属性/声明是特定于域的,可能会经常更改:

  • 用户ID
  • 角色
  • 与角色关联的权限
设计您的范围

作用域是高级静态值,例如“jobs\u read”和“jobs\u write”。它们表示一个数据区域,并允许对该数据进行操作

设计您的索赔

声明是运行时值,例如用户拥有的权限,在用户进行身份验证后查找这些值

管理索赔

将数据存储在正确的位置,随着时间的推移,您将能够更轻松地进行更改:

  • 通用身份数据应存储在KeyClope中
  • 特定于域/易失性的数据应存储在您的业务数据中
授权

这里有两种技巧:

  • 在颁发令牌时,从授权服务器伸出手,从业务数据中获取声明并将其包含在访问令牌中

  • 如果第一个选项不可行,则根据访问令牌中的用户ID在API中查找值

文档


在Curity,我们想以一种对任何供应商都适用的方式来解释这一问题的科学性,请参阅一个有效的示例。

感谢您提供了这一信息丰富的答案。明天我将通读这篇文章,看看是否有可能通过Key斗篷直接从AS获得这些声明。我不太确定如何将这些声明正确地存储在我的业务数据库中,但也许这篇文章也解释了这一点。酷-我会说这取决于规则的复杂性。人们有时从授权服务器中的所有规则开始,有时将角色和权限等表添加到自己的数据中。两者都没有错——选择的解决方案通常取决于规则的复杂程度,以及您是否觉得多个应用程序会相互冲突。但至少值得注意身份数据和业务数据之间的逻辑分离。