Я думаю, что на это смотрят с неправильной стороны.Определите идентичность на сервере как определяемую произвольным значением.Вероятно, просто последовательность БД.Свяжите любую демографическую информацию (имя, адрес электронной почты ...) и историю использования с этим идентификатором.
Отдельно определите объект аутентификации на сервере.Это может быть пользователь / пароль.Это может быть GUID / UUID устройства.Это может быть федеративный идентификатор, такой как OpenID.Данный идентификатор может иметь (и часто будет в вашем случае) несколько связанных объектов аутентификации.Очень возможно несколько аутентификационных идентификаторов одного типа.(например, GUID для моего смартфона, GUID для моего iPad ...)
Ваши внешние интерфейсы (веб-приложения или приложения) используют определенный API для аутентификации пользователя;использование любого из механизмов, которые поддерживает интерфейс.
В некоторых случаях (особенно в собственном приложении) представление неизвестного идентификатора инициирует создание нового идентификатора.Однако, как кто-то указал, в этой ситуации вы должны спросить пользователя, хотят ли они подключиться к существующему идентификатору.Им необходимо обеспечить аутентификацию в качестве этого идентификатора (один раз), чтобы установить это соединение.
Еще одна точка, независимо от того, что сервер использует для однозначного указания идентификатора, должна иметь значение , никогда предоставляется клиенту.Клиенты знают только о механизме аутентификации и его данных.То есть GUID / UUID, имя пользователя / пароль, ...
В дополнение к методам, перечисленным выше, что-то вроде OAuth более безопасно, чем локально сгенерированный GUID.Это одно из: легко определяемое или b: легко теряемое.Если значение очень предсказуемо (скажем, номер телефона), оно легко подделывается.Если оно генерируется во время выполнения и содержит трудно предсказуемое значение, такое как хэш текущего времени, когда оно генерируется впервые, то оно должно быть сохранено на устройстве и может быть легко потеряно при стирании устройства.Хорошие идентификаторы GUID могут быть сгенерированы, но они часто очень зависят от типа устройства.Такие вещи, как серийные номера устройств, полученные из ПЗУ, IMEI, ... Это легко выполнимо.Но это намного более зависит от конкретного устройства, чем мне, вероятно, будет удобно.
Самым большим реальным препятствием, которое я вижу во всем этом подходе, является то, что будет неудобно допускать только существующее устройство (нетusername / password) пользователь должен сесть за браузер ПК и подключиться к своей существующей учетной записи.