Как я могу найти все ресурсы «совместно используемые со мной» и «принадлежащие мне», используя Keycloak authzClient?

#java #kotlin #keycloak

#java #kotlin #keycloak

Вопрос:

В Keycloak у меня есть несколько ресурсов, и мне нужно получить все ресурсы, принадлежащие мне и «предоставленные мне» другими пользователями.

Например, этот ресурс принадлежит пользователю «test» и совместно используется пользователем «test2»:

Ресурсы Keycloak

Ресурс, совместно используемый с test2

Итак, идея в том, что test2 будет извлекать ресурсы, которыми он поделился.

Но единственный вариант, который я вижу, — это поиск по владельцу / имени / Uri: Keycloak docs

 /**
     * Query the server for any resource with the matching arguments.
     *
     * @param id the resource id
     * @param name the resource name
     * @param uri the resource uri
     * @param owner the resource owner
     * @param type the resource type
     * @param scope the resource scope
     * @param matchingUri the resource uri. Use this parameter to lookup a resource that best match the given uri
     * @param exactName if the the {@code name} provided should have a exact match   
     * @param deep if the result should be a list of resource representations with details about the resource. If false, only ids are returned
     * @param firstResult the position of the first resource to retrieve
     * @param maxResult the maximum number of resources to retrieve
     * @return a list of resource representations or an array of strings representing resource ids, depending on the generic type
     */
    public <R> R find(final String id, final String name, final String uri, final String owner, final String type, final String scope, final boolean matchingUri, final boolean exactName, final boolean deep, final Integer firstResult, final Integer maxResult)
 

С другой стороны, приложение пользовательского интерфейса учетной записи keycloak, похоже, обращается к
конечной точке для извлечения ресурсов, которыми я делюсь со мной

Комментарии:

1. Что вы имеете в виду под ресурсами

2. Я только что загрузил несколько снимков экрана.

3. Спасибо тебе за это.

4. Просто из любопытства, когда вы переходите на страницу пользователей «Мои ресурсы», то, что rest вызывает, — это keycloak на обратной стороне, что-нибудь интересное получается?

5. Не совсем потому, что вкладка «Мой ресурс» вызывает http://localhost/auth/realms/<realm>/account/resource?referrer=<client_id> , но это всего лишь пользовательский интерфейс, который возвращает текстовую / HTML-страницу. Конечная точка REST API, которая возвращает ту же аналогичную информацию, — это other: http://localhost/auth/realms/<realm>/authz/protection/resource_set , но я просто добиваюсь того, что она возвращает ресурсы, принадлежащие вам, а не общие с вами.

Ответ №1:

Если вы отправляете пустой запрос на авторизацию в Keycloak, он возвращает все разрешенные разрешения с соответствующими ресурсами. В этот список входят принадлежащие вам или совместно используемые с вами.

 fun AuthzClient.findAllGrantedPermissions(accessToken: String): TokenIntrospectionResponse {
    val request = AuthorizationRequest()
    val rpt = this.authorization(accessToken).authorize(request).token
    return this.protection().introspectRequestingPartyToken(rpt)
}