Keycloak KeyClope仅允许特定作用域

Keycloak KeyClope仅允许特定作用域,keycloak,openid-connect,Keycloak,Openid Connect,我目前正在从事一个使用OIDC的Key斗篷项目,我想知道在根据用户请求生成令牌时是否可能只允许特定的作用域。 我有一个客户端(API),仅当访问令牌定义了特定的作用域时,才允许访问特定的端点。对于请求令牌,我有另一个客户端(UI) 例如,如果用户从keydepot请求作用域“openid myapp:admin”以获得api端点的管理员权限,但他在UI客户端的keydepot中不是管理员,则应从访问令牌中删除myapp:admin作用域。 但是,如果另一个具有admin的用户请求这些作用域,则令

我目前正在从事一个使用OIDC的Key斗篷项目,我想知道在根据用户请求生成令牌时是否可能只允许特定的作用域。 我有一个客户端(API),仅当访问令牌定义了特定的作用域时,才允许访问特定的端点。对于请求令牌,我有另一个客户端(UI)

例如,如果用户从keydepot请求作用域“openid myapp:admin”以获得api端点的管理员权限,但他在UI客户端的keydepot中不是管理员,则应从访问令牌中删除myapp:admin作用域。 但是,如果另一个具有admin的用户请求这些作用域,则令牌应该包含这些作用域


有人能帮我吗?因为我无法让它工作,我尝试向授权作用域添加策略和权限,但之后我无法再请求客户端作用域。

我的目标是围绕访问令牌中包含的声明而不是作用域进行设计。每当您想要令牌中的动态行为时,答案通常是使用声明:

  • 作用域表示数据的静态区域,并允许对该数据执行操作。例如“订单读取”。这对所有用户都是一样的

  • 索赔往往用于实际授权。在您的情况下,“is_admin”的声明似乎是合适的。在需要时,可以使用它来减少访问

在Curity,我们有几篇关于这些主题的好文章,可以帮助您澄清这一点:


我的目标是围绕访问令牌中包含的声明而不是范围来设计。每当您想要令牌中的动态行为时,答案通常是使用声明:

  • 作用域表示数据的静态区域,并允许对该数据执行操作。例如“订单读取”。这对所有用户都是一样的

  • 索赔往往用于实际授权。在您的情况下,“is_admin”的声明似乎是合适的。在需要时,可以使用它来减少访问

在Curity,我们有几篇关于这些主题的好文章,可以帮助您澄清这一点:


非常感谢!我将进一步探讨如何在我们使用的当前系统中使用索赔。非常有用的文章。非常感谢!我将进一步探讨如何在我们使用的当前系统中使用声明。非常有信息量的文章。