Возможность обеспечения связи мобильного приложения / сервера после первоначального входа в OpenID Connect - PullRequest
0 голосов
/ 04 мая 2020

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

Мобильное приложение - это нативное приложение, написанное на C ++, под Qt (Android / iOS). Приложение взаимодействует с двумя типами серверов:

  • центральным сервером, на mydomain.com
  • коллекцией серверов сайтов клиентов (на всех выполняется один и тот же код, но с их отдельным суб-URL) домен xyz.mydomain.com)
  • центральный сервер направляет мобильные приложения на соответствующий сайт клиента, основываясь на необходимой услуге, и хранит учетные записи пользователей, идентификационные данные и т. д. Серверы основаны на nodejs / express, иметь nginx внешние интерфейсы, собственный сертификат безопасности и общаться через https. Идентификация пользователей проверяется по очень специфической c службе OpenID Connect (не GAFAM, а очень специфичной c одна).

Цель состоит в том, чтобы после установки и инициализации приложения это приложение Экземпляр привязан к данному пользователю, пока он не будет удален (без выхода из системы / повторного входа). Таким образом, процесс регистрации выглядит примерно так:

  • приложение устанавливается
  • пользователь идентифицирует через указанный c сторонний OpenID (я думаю, через отдельную веб-страницу вне приложения Я не хочу добавлять дополнительные проблемы безопасности в само приложение)
  • обратный вызов OpenID возвращается на центральный сервер. Этот сервер решает, была ли транзакция неудачной или успешной, и создает новую проприетарную учетную запись пользователя, если все прошло хорошо.
  • Я надеюсь оттуда получить OpenID. OpenID существует только для того, чтобы изначально удостовериться, что пользователь соответствует реальному на стороннем сервере, но мне не нужно сохранять «связь» с этим идентификатором OpenID третьей стороны. На самом деле, я хочу, чтобы как можно больше не запрашивать имя пользователя и пароль для оставшейся части жизни приложения.
  • Все дальнейшие вызовы API основаны на идентичности экземпляра приложения. Он привязан к проприетарной учетной записи пользователя. Пользователю разрешено иметь несколько экземпляров приложения (пару телефонов, может быть, планшет), но для моих служб важно знать, какое устройство используется для данного вызова API (поверх какого пользователя).
  • С другой стороны, большая часть перемещаемых данных является конфиденциальной, ее целостность, подлинность и конфиденциальность должны быть обеспечены (что противоречит приведенным выше пожеланиям для простоты).

В случае токена / key / other будет украден или скопирован, я надеюсь установить обнаружение, когда несколько объектов используют один и тот же идентификатор. В этом случае мы возвращаемся к разрешению конфликтов на основе исходного OpenID, даже, возможно, вмешательства оператора.

Итак ... большой вопрос, как определить это приложение? После первого входа в OpenID, я просто:

  • создаю UID для этого мобильного приложения
  • отправляем мобильному приложению повар ie или JSON веб-токен, содержащий что UID
  • и дальнейшие вызовы CAP, полагаться на этого повара ie или токен для идентификации приложения?

Достаточно ли этого? По сути, я создаю своего рода ключ API, это нормально? Должен ли я создать пару закрытых / publi c ключей для каждого приложения и попросить их отправить свои полезные данные на серверы, зашифрованные их publi c ключом (поверх https)? Я, вероятно, буду держать ссылку на веб-сокет открытой для каждого приложения, добавляет ли это какое-либо соображение?

Это открытые вопросы, но каковы «стандартные» решения для этого на сегодняшний день?

...