Я пытаюсь выполнить вставку SPARQL в график, который я загрузил в Virtuoso, выполняя его через HTTP-запрос к конечной точке Virtuoso.
Для HTTP-запроса я использую axios , и я уже успешно выполнил некоторые запросы SPARQL Select, поэтому моя проблема заключается в процессе аутентификации, который мне нужно сделать для обновления графика.
После долгих исследований я обнаружил, что в 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
и смог успешно войти в систему и выполнить запрос вставки. Это означает (я полагаю), что у меня нет проблем с правами доступа для моего пользователя.
Однако, когда я пытаюсь сделать это через 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 с соответствующей авторизацией. Я также должен сказать, что создание службы было непростым, но в итоге оно сработало.
Я надеюсь, что эта информация поможет кому-то подумать над этим подходом раньше, потому что это привело к большой трате времени в моем проекте. Как я уже сказал, я решил собственную проблему выполнения вставок через мое приложение, но проблема аутентификации все еще существует, поэтому не стесняйтесь добавлять любые новые комментарии по этой теме.