Рассмотрим следующий сценарий.
На сайте foo.com есть магазин приложений.Разработчики могут зарегистрировать свои приложения там.Приложение состоит из идентификатора, логотипа, URL-адреса и набора разрешений.
Пользователи могут просматривать магазин приложений и активировать приложения.Активируя приложение, они признают, что приложение может действовать от их имени с предоставленными разрешениями.Активация приложения дает им значок в их меню с логотипом / идентификатором приложения.Он также генерирует и сохраняет токен авторизации с указанными разрешениями.
Когда они щелкают приложение, соответствующий URL-адрес приложения загружается в iframe.Все идет нормально.Теперь приложению нужен способ действовать от имени пользователя на foo.com.Для этого родительское окно использует window.postMessage для отправки токена аутентификации в iframe, содержащую приложение.
HTML-код в URL-адресе приложения должен включать небольшой фрагмент JS, который прослушивает токен аутентификации изродительское окно.Как только он получает токен, он может сохранить его в файле cookie / хранилище сеанса / где-либо еще и продолжить рендеринг приложения и совершать звонки от имени пользователя.
(примечание: я не указал токен аутентификации.Это может быть токен доступа oAuth, JWT или любой другой.)
Теперь вопрос: как это ужасная и невероятно небезопасная идея?
Альтернативный "стандарт""подход должен заключаться в том, чтобы URL приложения инициировал трехстороннюю схему проверки подлинности oAuth, которая перенаправляла бы пользователя обратно на foo.com (внутри iframe, так что теперь foo.com внутри foo.com), чтобы принять приложение (которое по общему признанию выможет сделать автоматически, так как пользователь уже принял приложение), тогда foo.com перенаправит обратно на URL приложения с кодом авторизации, который он может обменять на токен доступа.
Я думаю,Предложенный поток PostMessage намного проще и чище.Какие недостатки я не вижу?
Очевидно, что это не панацея для идентификации сторонних приложений.Работает только в том случае, если сервер авторизации контролирует загрузку стороннего приложения.