Keycloak适配器策略执行者
如果您使用的是Keycloak OIDC适配器,则可以对应用程序执行授权决策。
当您为Keycloak应用程序启用策略强制时,相应的适配器将拦截对您的应用程序的所有请求,并强制从服务器获取的授权决定。
策略实施与应用程序的路径以及使用Keycloak管理控制台为资源服务器创建的资源紧密相关。默认情况下,创建资源服务器时,Keycloak会为资源服务器创建一个默认配置,以便您可以快速启用策略强制。
默认配置允许访问您的应用程序中的所有资源,只要身份验证的用户属于与受保护的资源服务器相同的领域。
策略执行配置
要为您的应用程序启用策略强制,请将以下属性添加到您的keycloak.json文件中:
keycloak.json
{
"policy-enforcer": {}
}
或详细一些,比如要手动定义被保护的资源:
{
"policy-enforcer": {
"user-managed-access" : {},
"enforcement-mode" : "ENFORCING"
"paths": [
{
"path" : "/someUri/*",
"methods" : [
{
"method": "GET",
"scopes" : ["urn:app.com:scopes:view"]
},
{
"method": "POST",
"scopes" : ["urn:app.com:scopes:create"]
}
]
},
{
"name" : "Some Resource",
"path" : "/usingPattern/{id}",
"methods" : [
{
"method": "DELETE",
"scopes" : ["urn:app.com:scopes:delete"]
}
]
},
{
"path" : "/exactMatch"
},
{
"name" : "Admin Resources",
"path" : "/usingWildCards/*"
}
]
}
}
以下是每个配置选项的说明:
- policy-enforcer
指定用于定义策略实际强制执行的配置选项,以及可选的保护路径。如果未指定,策略执行者将查询与受保护的资源服务器相关联的所有资源。在这种情况下,需要确保资源正确配置与要保护的路径匹配的URI属性。
- user-managed-access
指定适配器使用UMA协议。如果指定,则适配器向服务器查询权限凭证,并根据UMA规范将其返回给客户端。如果未指定,则适配器依赖于发送到服务器的请求方令牌(RPT)来强制实施权限。
- enforcement-mode
指定策略的执行方式。
- ENFORCING
(默认模式)即使没有与给定资源相关联的策略,默认情况下拒绝请求。
- PERMISSIVE
即使没有与给定资源相关联的策略,也允许请求。
- DISABLED
完全禁用对策略的评估,并允许访问任何资源。
- on-deny-redirect-to
定义当从服务器获取“访问被拒绝”消息时,重定向客户端请求的URL。默认情况下,适配器使用403 HTTP状态代码进行响应。
- paths
指定要保护的路径。如果指定了此选项,则策略执行者会向服务器查询具有相同值的URI的资源。目前,支持路径匹配的基本逻辑。有效路径的示例是:
Wildcards:
/*
Suffix:
/*.html
Sub-paths:
/path/*
Path parameters: /resource/{id}
Exact match: /resource
Patterns: /{version}/resource, /api/{version}/resource, /api/{version}/resource/*
methods
要保护的HTTP方法(例如,GET,POST,PATCH)以及它们如何与服务器中的给定资源的范围相关联。 + [/ '']
- method
HTTP方法的名称。
- scopes
具有与方法关联的范围的字符串数组。将范围与特定方法相关联时,尝试访问受保护资源(或路径)的客户端必须提供一个RPT,该权限授予列表中指定的所有范围。例如,如果使用范围创建定义方法POST,则RPT必须包含向路径执行POST时授予对创建作用域的访问权限。
- enforcement-mode
指定策略的执行方式。
- ENFORCING
(默认模式)即使没有与给定资源相关联的策略,默认情况下拒绝请求。
- DISABLED
禁用对路径策略的执行