Стороннему приложению (A) необходимо связать пользователей с нашим приложением (B) и войти в систему за кулисами.
Оба приложения работают независимо со своими системами аутентификации. Пользователи имеют общий уникальный идентификатор, но имеют разные токены аутентификации (имя пользователя / пароль / ключ и т. Д.) В каждом приложении.
Два усложняющих фактора:
- Один пользователь приложения B может связываться с двумя пользователями приложения A (например, обе учетные записи в приложении B будут перенаправлять и входить в одну учетную запись приложения A)
- Пользователь приложения B может фактически не иметь никаких существующих токенов авторизации, только его личная запись и идентификатор пользователя, но мы все же хотим иметь возможность войти в систему, если они поступают из приложения A.
Моими первыми мыслями были OAuth - но я не думаю, что это сработает, поскольку некоторые пользователи не имеют учетных записей приложения B и, следовательно, не смогут войти в систему, чтобы предоставить доступ приложению A (см. Пункт 2 выше).
Самый простой способ, который я придумал, это:
- Каждое приложение имеет предварительный общий ключ, например, "LOLS"
- Общий алгоритм хеширования генерирует независимые идентичные токены, например хеш (PSK + UID)
- Приложение B хранит хешированные токены для каждого пользователя
- Приложение A отправляет POST с UID и хэшированным токеном в приложение B, которое использует его для идентификации и аутентификации пользователя
Проблема в том, что это ужасно небезопасно. Любой, кто знает предварительный общий ключ (любой системный администратор) и идентификатор пользователя (еще раз, любой системный администратор), сможет аутентифицироваться как ЛЮБОЙ пользователь, что недопустимо.
У кого-нибудь есть решения? Я бы предпочел существующие стандарты, но я открыт для индивидуальных реализаций. На самом деле мы не можем ничего сделать для приложения B, кроме как заставить их использовать любой предоставляемый нами API.