Совместное использование аутентификации nextcloud с пользовательским веб-приложением - PullRequest
1 голос
/ 11 мая 2019

Я хотел бы разработать приложение (NodeJS, vueJS, postgreSQL), которое использует учетные записи пользователей nextcloud. Идея состоит в том, что пользователь аутентифицируется с помощью своего идентификатора nextcloud, а затем может получить доступ и к следующему облаку, и к моему веб-сайту. Обратите внимание, что мое приложение не является модулем nextcloud или приложением nextcloud. Это полноценный веб-сайт, но я хотел бы использовать его на nextcloud для идентификации пользователя

Я провел некоторое исследование в Интернете, но не нашел простого объяснения, как это сделать… возможно ли это?

Olivier

1 Ответ

0 голосов
/ 18 мая 2019

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

  1. Создание пользовательского приложения в вашем экземпляре nextcloud, к которому ваш сайт будет перенаправлять пользователей.Затем указанное пользовательское приложение (после успешной аутентификации внутри nextcloud) перенаправит пользователя обратно в ваше приложение с токеном доступа (например, в качестве параметра запроса GET url).Затем бэкэнд вашего веб-сайта отправит запрос и конечную точку API, размещенную в пользовательском приложении, чтобы определить действительность полученного токена (не рекомендуется, я объясню почему через секунду).
  2. Запрос пользователяУчетные данные для входа в систему nextcloud и попытка войти в систему через IMAP, SMB или FTP для определения действительности предоставленных учетных данных.Этот вариант не рекомендуется, поскольку он требует, чтобы пользователь предоставил свои учетные данные бэкэнду вашего веб-сайта.
  3. Используя подход, несколько похожий на 1), без повторного изобретения колеса - благодаря тому, что Nextcloud поддерживает внешниеаутентификация через OAuth 2.0

Использование OAuth 2.0 позволит вашему веб-сайту аутентифицировать пользователей снаружи через ваш экземпляр nextcloud.

Вот как это будет работать в вашем случае:

  1. Ваши веб-сайты перенаправляют пользователя на конечную точку авторизации OAuth (можно сделать по простой ссылке) вашего экземпляра nextcloud (nextcloud-instance-address/index.php/apps/oauth2/authorize), идентифицируя себя при помощи Идентификатор клиента
  2. Экземпляр Nextcloud заботится об аутентификации (пользователи видят обычный экран входа в систему с дополнительной информацией о том, что ваш сайт хочет получить доступ к своей учетной записи)
  3. При успешном входе в систему экземпляр nextcloud генерирует запросить токен и перенаправить пользователя обратно наВаш веб-сайт (на указанный URI перенаправления )
  4. Ваш веб-сайт получает маркер запроса (получает его через URI перенаправления ) и отправляет егок конечной точке токена вашего экземпляра Nextcloud (your-instance-address/index.php/apps/oauth2/api/v1/token) с Секретным ключом клиента .Ваш веб-сайт получает токен доступа в качестве ответа.
  5. Ваш веб-сайт теперь может использовать токен доступа (в качестве токена на предъявителя) для отправки авторизованных запросов ПользователюAPI предоставления вашего экземпляра nextcloud nextcloud-instance-address/index.php/ocs/v2.php/cloud/user?format=json

Хорошая идея - хранить маркер доступа в сеансе на основе файлов cookie.

Настройкаэто довольно просто (по крайней мере, на стороне вашего экземпляра nextcloud) - вы должны добавить свой сайт в разделе настроек безопасности администратора учетной записи администратора nextcloud.Вам нужно будет указать URI перенаправления, который ваш сайт будет использовать для получения маркера запроса при успешном входе в систему. Секрет клиента ключ и Идентификатор клиента будут сгенерированы для вас в админ-панели nextcloud.

Этот учебник поможет вам в создании вашегоБэкэнд веб-сайта в node.js.В вашем случае Потребитель является вашим сайтом, а Поставщик услуг является вашим экземпляром nextcloud.

Не стесняйтесь спрашивать, если что-то кажется неясным.Удачи и удачного кодирования!

...