Я работаю над навыком Alexa, который поддерживает связывание учетных записей, и размещаю инфраструктуру для связывания учетных записей с использованием ASP.NET Core с ASP.NET Core Identity на веб-сайте Microsoft Azure AppService в IIS.
Я реализовал возможность входа с помощью Amazon, Facebook, GitHub, Google, Microsoft и Twitter через Microsoft.AspNetCore.Authentication.*
пакеты NuGet. Все они отлично работают для стандартного входа в систему в веб-браузере, а также для ручного тестирования процесса привязки учетной записи через браузер.
Однако при использовании приложения iOS Alexa работают только Amazon и Facebook. Google не работает, потому что его использование из встроенных приложений запрещено (я получил страницу Google 403, сообщающую мне об этом), но для трех других я понятия не имею, что происходит, чтобы что-то перестало работать. В iOS Safari все работает нормально, поэтому для iPhone или iPad, где я тестировал, не было ничего глобального.
GitHub, Microsoft и Twitter зависают при отправке формы входа.
Я использую CSP, поэтому я подумал, что, возможно, список form-action
был неправильным (например, иногда Amazon перенаправлялся на na.account.amazon.com
, что сначала приводило к сбою, поскольку я думал, что будет использоваться только account.amazon.com
), но проблемы сохранялись, когда список CSP был обновлено, чтобы временно разрешить что-либо исключить CSP. Кроме того, я использую report-uri.io
с CSP, который не получил ошибок.
Я запустил свой iPhone и iPad через Fiddler в качестве прокси и обнаружил, что встроенная страница правильно отправляет HTTP POST на мой сайт, который отвечает во всех 6 случаях правильным ответом HTTP 302. В случае Amazon и Facebook следуют 302, и все работает, как ожидалось. Для остальных трех с проблемой, похоже, это конец запросов от приложения Alexa.
Кажется, что встроенный браузер полностью игнорирует HTTP 302, оставляя пользователя в подвешенном состоянии при попытке войти в систему.
Я также пробовал приложение Android Alexa, которое демонстрирует другое поведение:
- Amazon - редирект загружает Chrome, нарушая поток внутри приложения;
- Facebook - работает корректно;
- GitHub - перенаправление загружает Chrome, нарушая поток внутри приложения;
- Гугл - работает корректно;
- Microsoft - редирект загружает Chrome, нарушая поток внутри приложения;
- Twitter - перенаправление загружает Chrome, нарушая поток внутри приложения.
Единственным общим знаменателем является то, что Facebook и Google работают для обоих приложений (хотя Google запрещает их использование на iOS).
Что я мог делать / упускать из-за того, что приложения Alexa не следовали этим перенаправлениям правильно? Что может привести к тому, что приложение iOS не будет следовать перенаправлениям? Что заставит приложение Android открывать перенаправления в Chrome, а не во встроенном браузере?