Я пытаюсь выполнить вставку SPARQL в график, который я загрузил в Virtuoso, делая это через HTTP-запрос к конечной точке Virtuoso.

Для HTTP-запроса я использую axios, и я уже успешно выполнил несколько запросов SPARQL Select, поэтому мои Проблема заключается в процессе аутентификации, который мне нужно сделать для обновления Graph.

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

  • http://<cname>/sparql-auth (аутентификация SQL)
  • http://<cname>/sparql-oauth (OAuth)
  • http://<cname>/sparql-graph-crud-auth (OAuth CRUD)
  • https://<cname>/sparql и https://<cname>/sparql-webid (протокол WebID)

Я хочу сделать это как можно проще, поэтому я проверил http://<cname>/sparql-auth и смог войти в систему и успешно выполнить запрос Insert. Это означает (я полагаю), что у меня нет проблем с правами доступа для моего пользователя.

Однако, когда я пытаюсь сделать это через HTTP-запрос, я не могу правильно аутентифицировать своего пользователя, я не знаю, как правильно указать имя пользователя и пароль.

Я также обнаружил, что в Virtuoso по умолчанию активирован метод Digest Authentication , поэтому я изменил его на Basic Authentication на пути /sparql-auth как есть самый простой способ для меня. Я сделал это изменение с помощью http://<cname>/conductor Virtuoso.

И все же я не могу правильно аутентифицироваться с помощью HTTP-запроса Get, получая код состояния HTTP 401 (неавторизован) .

Вот как я делаю запрос:

axios.get('http://localhost:8890/sparql-auth?query=' + encodeURIComponent(pruebaInsertQuery),{
        auth: {  // This is provided by axios, to perform an HTTP Basic auth
            username: 'myUserName',
            password: 'myPassword'
        },
    })
    .then((response) => {
        console.log(response);
    })
    .catch((error) => {
        console.log(error);
    });

Я просмотрел все учебники и руководства, которые есть в Virtuoso, но я действительно новичок в мире SPARQL, RDF и Virtuoso, и я все еще теряюсь во всем.

Заранее спасибо!!


Вопрос отредактирован из-за некоторых комментариев:

Я также пробовал это с почтовым запросом, и ничего не изменилось.

Я пробовал еще один способ - использовать формат http://myUserName:myPassword@localhost:8890/sparql-auth, но получаю точно такой же ответ.

Я совсем не уверен, передаю ли я одни и те же строки через вызов axios и через путь /sparql-auth. Virtuoso может использовать некоторую кодировку, о которой я не нашел, и я не могу найти ни одного примера аутентификации SQL для Virtuoso (тип аутентификации, который я пытаюсь использовать), даже для метод дайджест-аутентификации, который используется в Virtuoso по умолчанию.

В моем журнале Virtuoso.log ничего не говорится о HTTP-запросах, даже об успешных. Я изучу это подробнее, так как это может быть из-за конфигурации, которая у меня есть.

Спасибо вам за помощь!


Наконец-то нашел способ получить желаемый результат:

Мне не удалось найти решение проблемы аутентификации, о которой я говорил здесь , но мне все еще нужно было сделать эти вставки, поэтому я наконец полностью изменил свой подход и создал моя собственная служба Java RESTful в качестве посредника между моим приложением и Virtuoso .

Я обнаружил, что Virtuoso предоставляет некоторые библиотеки для Java , и эти библиотеки помогли мне подключиться к Virtuoso с соответствующей авторизацией. Я также должен сказать, что создать сервис было непросто, но, наконец, он заработал.

Я надеюсь, что эта информация поможет кому-то подумать об этом подходе раньше, потому что это привело к большой трате времени в моем проекте. Как я уже сказал, я решил свою собственную проблему вставки через свое приложение, но проблема аутентификации все еще существует, поэтому не стесняйтесь добавлять любые новые комментарии по этой теме.

2
igalarza 16 Май 2018 в 19:57

1 ответ

Лучший ответ

Вы можете выполнять INSERT, DELETE и UPDATE (объединяя DELETE и INSERT) через конечную точку службы запросов SPARQL, предоставляемую любым экземпляром Virtuoso с использованием языка обновления SPARQL (SPARUL).

Естественно, конечные точки Virtuoso защищены по умолчанию; вот почему /sparql у вас не сработал. Конечная точка /sparql-update используется для базовой дайджест-аутентификации, которая сводится к обычному Управление доступом на основе ролей (RBAC) с областью учетных записей пользователей Virtuoso SQL.

Чтобы включить гораздо более мощный Управление доступом на основе атрибутов (ABAC), которое ограничено идентификационными данными веб-масштаба, вам необходимо установить Enterprise Edition плюс модуль виртуального уровня аутентификации (VAL) (предоставляется пакет Virtuoso Application Distribution (VAD)).

Вот простое пошаговое руководство по функциональности ABAC:

  1. Загрузите и установите Virtuoso Enterprise Edition.
  2. Загрузите и установите модуль VAL через его VAD.
  3. Используйте вкладку Системный администратор → Пакеты пользовательского интерфейса Conductor, чтобы убедиться, что VAL включен.

    Пользовательский интерфейс проводника для настройки виртуального уровня аутентификации

  4. Вернитесь к своей конечной точке SPARQL и попытайтесь выполнить INSERT или DELETE таргетинг на именованный граф.

Надеюсь, это поможет?

3
TallTed 25 Июн 2018 в 18:57