Я подумал, что было бы неплохо избавиться от пользовательской системы аутентификации и вместо этого позволить моим пользователям входить в систему с той же учетной записью, которую они используют в SPA, используя моего поставщика OpenID.
Это то, что вам предоставляют OAuth 2.0 и OpenID Connect.Возможность использовать единый идентификатор пользователя среди разных сервисов.Так что это правильный подход.
больше не было возможности хранить какие-либо «секретные данные» на клиенте / стороннем устройстве (нативные приложения), так как это могло стать скомпрометированным
Правильно.С точки зрения спецификации OAuth 2.0 они называются публичные клиенты .Им не рекомендуется иметь клиентские секреты, связанные с ними.Вместо этого для проверки запроса токена в провайдере идентификации используется код авторизации, идентификатор приложения и URL-адрес перенаправления.Это делает код авторизации ценным секретом.
Свяжите домен, скажем, app.example.com, с моим мобильным приложением, используя Apple Universal Links и Android App Links.
Не эксперт в области мобильных устройств.Но да, пользовательские домены URL - это способ обработки перенаправления для OAuth и OpenID Connect.
Также использование PKCE является правильным подходом.Следовательно, перенаправление происходит в браузере (пользовательский агент), могут быть злоумышленники, которые могут получить код авторизации.PKCE избегает этого, вводя секрет, который не будет открыт пользовательскому агенту (браузеру).Секрет используется только в запросе токена (прямое HTTP-соединение), поэтому является безопасным.
Q1
Использование потока кода авторизации с PKCE является стандартной передовой практикой, рекомендованной спецификациями OAuth.,Это справедливо и для OpenID Connect (следовательно, он построен на OAuth 2.0)
Следует отметить, что, если вы считаете, что секрет PKCE может быть использован, то это буквально означает, что устройство взломано.Подумайте об извлечении секрета из памяти ОС.это означает, что система взломана (вирус / кейлоггер или как мы их называем).В таком случае конечному пользователю и вашему приложению есть о чем беспокоиться.
Кроме того, я считаю, что это для бизнес-приложений.В этом случае ваши клиенты обязательно получат руководство по безопасности для своих устройств.Например установка антивирусов и ограничения установки приложения.Чтобы предотвратить атаки, упомянутые выше, нам придется полагаться на такие учреждения безопасности.Один OAuth 2.0 не является безопасным.Вот почему существуют руководства по лучшей практике ( RFC68129 ) и правила.
Q2
Не ясно по этому вопросу.Страница согласия представлена от провайдера идентификации.Так что это будет конфигурация этой системы.
Q3
Ну, Identity Provider может поддерживать сеанс единого входа в браузере.Страница входа присутствует в этом браузере.Поэтому в большинстве случаев, если приложение использует один и тот же браузер, пользователи должны иметь возможность использовать SPA без входа в систему.