Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
如何通过keydape Java API基于资源类型发出授权请求?_Java_Resources_Authorization_Keycloak - Fatal编程技术网

如何通过keydape Java API基于资源类型发出授权请求?

如何通过keydape Java API基于资源类型发出授权请求?,java,resources,authorization,keycloak,Java,Resources,Authorization,Keycloak,我希望能够使用Java授权API从KeyClope UI复制该行为: 我的目标是获得一个列表,列出用户可以访问的特定资源类型的所有资源。 我在这里测试了很多东西 这将给我一个每个人都可以访问的资源列表。尽管我担心这不会很好地扩展 AuthzClient-AuthzClient=AuthzClient.create(); AuthorizationResource AuthorizationResource=authzClient.authorization(keydeposecuritycon

我希望能够使用Java授权API从KeyClope UI复制该行为:

我的目标是获得一个列表,列出用户可以访问的特定资源类型的所有资源。 我在这里测试了很多东西

这将给我一个每个人都可以访问的资源列表。尽管我担心这不会很好地扩展

AuthzClient-AuthzClient=AuthzClient.create();
AuthorizationResource AuthorizationResource=authzClient.authorization(keydeposecuritycontext.getTokenString());
返回authorizationResource.authorization().getToken();
这就是我用来获取特定作用域的权限的方法

AuthzClient-AuthzClient=AuthzClient.create();
AuthorizationResource authResource=authzClient.authorization(keydeposecuritycontext.getTokenString());
AuthorizationRequest authRequest=新的AuthorizationRequest();
authRequest.addPermission(null,SCOPE1);
authRequest.addPermission(null,SCOPE2);
返回authResource.authorize(authRequest.getToken();
然而,我想做的是对特定类型的请求,这似乎是不可能的

我知道我可以列出具体类型,包括:

authzClient.protection().resource()
.find(null,null,null,null,“The-Type-I-Want”,null,false,0,Integer.MAX_值)
但同样,这似乎不合适,因为它不是基于用户的权限,如果我尝试使用它,它肯定不会很好地扩展


那么如何执行资源类型授权请求呢?

因此我找到了另一种解决方案。它并没有真正回答核心问题,但它回答了背后的需求,即根据权限列出一组特定类型的资源

我没有用这里的字体。我实际上使用了范围权限
授权请求
,正如在原始问题中解释的那样。我所改变的是如何在KeyClope端进行配置

  • 创建授权范围,例如
    myresourcetype:read
  • 创建一个资源并在其上设置该范围
  • 创建反映访问该资源的条件的策略
  • 使用策略和范围创建基于资源的权限
  • 现在,如果我执行以下请求:

    AuthzClient-AuthzClient=AuthzClient.create();
    AuthorizationResource authResource=authzClient.authorization(keydeposecuritycontext.getTokenString());
    AuthorizationRequest authRequest=新的AuthorizationRequest();
    authRequest.addPermission(null,“myresourcetype:read”);
    返回authResource.authorize(authRequest.getToken();
    
    我可以期待以下答案:

    {
    [...],
    “授权”:{
    “权限”:[
    {
    “范围”:[
    “myresourcetype:已读”
    ],
    “rsid”:“f5466ba5-5c2c-4ec9-99f9-123d739f659c”,
    “rsname”:“myresource1”
    },
    {
    “范围”:[
    “myresourcetype:已读”
    ],
    “rsid”:“8ba2df8d-7274-48f2-a26a-edaa44c49c03”,
    “rsname”:“myresource2”
    }
    ]
    }
    }
    

    这并不理想,因为我希望能够根据资源的实际类型获取资源,但目前这是我能想到的最好的方法。

    您解决过您的核心问题吗?