Permissions 服务帐户的KeyClope uma grant类型票证似乎不适用于策略

Permissions 服务帐户的KeyClope uma grant类型票证似乎不适用于策略,permissions,authorization,keycloak,authz,Permissions,Authorization,Keycloak,Authz,我正在尝试使用KeyClope AuthzClient在资源服务器中注册资源和相关权限 我有一个启用了authz服务的资源服务器“resourceserver” 使用AuthzClient(使用包含资源服务器的客户机id和密码的json文件初始化),我能够获得pat ... authzClient.obtainAccessToken().getToken(); ResourceRepresentation resource = new ResourceRepresenta

我正在尝试使用KeyClope AuthzClient在资源服务器中注册资源和相关权限

我有一个启用了authz服务的资源服务器“resourceserver”

使用AuthzClient(使用包含资源服务器的客户机id和密码的json文件初始化),我能够获得pat

    ...
    authzClient.obtainAccessToken().getToken();
    ResourceRepresentation resource = new ResourceRepresentation();
    resource.setName("myresource");
    resource.setUris(new HashSet<>(Collections.singletonList("urn:resourceserver:resourcetype1:myresource")));
    resource.setOwnerManagedAccess(true);
    resource.setType("urn:resourceserver:resourcetype1");
    resource.addScope("read", "write");
    resource = authzClient.protection(pat).resource().create(resource);


    UmaPermissionRepresentation permissionRepresentation = new UmaPermissionRepresentation();
    permissionRepresentation.setName("myresourcepermissions");
    permissionRepresentation.setDescription("foo");
    permissionRepresentation.addRole("somerole");
    UmaPermissionRepresentation result = authzClient.protection(pat).policy(resource.getId()).create(permissionRepresentation)
。。。
authzClient.ActainAccessToken().getToken();
ResourceRepresentation resource=新的ResourceRepresentation();
resource.setName(“myresource”);
setUris(新的HashSet(Collections.singletonList(“urn:resourceserver:resourcetype1:myresource”));
resource.setOwnerManagedAccess(true);
setType(“urn:resourceserver:resourcetype1”);
addScope(“读”、“写”);
resource=authzClient.protection(pat.resource().create(resource);
UMAPPermissionRepresentation permissionRepresentation=新的UMAPPermissionRepresentation();
permissionRepresentation.setName(“myresourcepermissions”);
permissionRepresentation.setDescription(“foo”);
permissionRepresentation.addRole(“somerole”);
UMAPPermissionRepresentation结果=authzClient.protection(pat).policy(resource.getId()).create(permissionRepresentation)
执行完这段代码后,我可以在keydape管理UI中看到,资源已经创建,范围也已经存在,但是策略/权限似乎没有显示出来

我相信这可能是有意的,因为这个keydape管理UI只显示类型为client、role、js等的策略,而不是UmaPermissionRepresentation创建的“uma”

但是,通过使用pat查询
authz/protection/uma policy
,我可以看到keydape中存在策略

所以这里有一些东西。现在测试它。我创建了一个普通用户,并为其分配了领域角色
somerole
。使用这个用户和一些任意的公共客户端,我可以得到一个RPT

首先使用密码授权获取访问令牌:

grant\u type=password&username=joe&password=password&client\u id=somepublicclient

然后将其交换为RPT:

grant\u type=urn:ietf:params:oauth:grant type:uma ticket&viewer=resourceserver

RPT返回,如果我查看它的内容,我可以看到授权块,允许我访问myresource

但是,当我使用客户端凭据流尝试使用服务帐户(我还向其授予了
somerole
角色)的类似流来获取初始访问令牌时:

grant\u type=client\u credentials&client\u id=servicecount1&client\u secret=77c1ffa8-0ea8-420c-ad45-E1A69A0388D

我能够获得RPT,但该RPT在授权/权限块中不包含myresource,仅包含默认资源

我一直在试图理解这是为什么。我还尝试在UMAPPermissionRepresentation中使用
.addClient(“serviceaccount1”)
甚至
.addUser(“service-account-serviceaccount1”)
,但策略似乎没有生效,我的服务帐户也没有访问资源的权限

这是使用KeyClope 4.8.0.Final


注意:使用keydape管理客户机,我能够创建使这项工作真正起作用的策略/权限;但在我的环境中,这会导致其他问题,因为我需要分配给管理客户端的角色(如查看所有客户端以检索id等)。

我在KeyClope 11.0.2中也有同样的问题。 共享资源不会在服务帐户的权限票证中结束。服务帐户位于授权令牌服务中。 由于与服务帐户共享资源是可能的,这似乎不一致

但是,您可以通过客户端上的协议映射器将
azp
声明显式设置为您的
客户端id
之外的内容来解决此问题