gpt4 book ai didi

permissions - 服务帐户的 Keycloak uma-grant 类型票证似乎不适用于策略

转载 作者:行者123 更新时间:2023-12-03 21:15:04 26 4
gpt4 key购买 nike

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

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

使用 AuthzClient,使用包含资源服务器的客户端 ID 和 secret 的 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)

执行此代码后,我可以在 keycloak 管理 UI 中看到已创建资源和范围,但似乎没有显示策略/权限。

我相信这可能是有意的,因为这个 keycloak 管理 UI 只显示类型为客户端、角色、js 等的策略,而不是 UmaPermissionRepresentation 创建的“uma”。

但是,我可以通过查询 authz/protection/uma-policy 看到 Keycloak 中存在该策略。用我的拍拍。

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

首先使用密码授权获取访问 token :
grant_type=password&username=joe&password=password&client_id=somepublicclient
然后将其交换为 RPT:
grant_type=urn:ietf:params:oauth:grant-type:uma-ticket&audience=resourceserver
RPT 回来了,如果我查看它的内容,我可以看到授权 block 让我可以访问 myresource 资源。

但是,当我尝试使用服务帐户(我还授予 somerole 角色)使用客户端凭据流来获取初始访问 token 的类似流程时:
grant_type=client_credentials&client_id=serviceaccount1&client_secret=77c1ffa8-0ea8-420c-ad45-e1a69a03838d
我能够获得一个 RPT,但该 RPT 在授权/权限 block 中不包含 myresource,只有默认资源。

我一直试图理解为什么会这样。我也尝试过使用 .addClient("serviceaccount1")甚至 .addUser("service-account-serviceaccount1")在 UmaPermissionRepresentation 中,但该策略似乎没有生效,并且我的服务帐户无权访问该资源。

这是使用 Keycloak 4.8.0.Final。

注意:使用 keycloak 管理客户端,我可以创建实际执行此操作的策略/权限;但在我的环境中,这会导致其他问题,因为我需要分配给管理客户端的角色(例如查看所有客户端以检索 id 等)

最佳答案

我对 KeyCloak 11.0.2 有同样的问题。
共享资源不会最终出现在服务帐户的权限票中。服务帐户是 explicitly excluded在授权 token 服务中。
由于可以与服务帐户共享资源,这似乎不一致。
但是,您可以通过显式设置 azp 来解决此问题。声称拥有您的client_id 以外的东西通过客户端上的协议(protocol)映射器。
protocol mapper on your client .

关于permissions - 服务帐户的 Keycloak uma-grant 类型票证似乎不适用于策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54099677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com