Фон
- Мы разработали веб-приложение с rest-api с использованием oauth2/oidc и поддержкой сторонних приложений.
- Мы разработали собственные нативные приложения для Android и iOS. В настоящее время они извлекают долгоживущий токен из потока учетных данных пользователя (экран согласия не требуется).
- В настоящее время мы расширяем наш поток аутентификации, чтобы также принимать внешний вход через google/office365. Это также поддерживается путем указания значения acr в коде авторизации/неявном потоке oauth.
Вопрос/проблема
- Мы, конечно, хотим иметь возможность полностью доверять нашему родному приложению и не показывать экран согласия для лучшего взаимодействия с пользователем. Однако при использовании кода авторизации/неявного потока ничто не может считаться секретом, и злонамеренный хакер может потенциально использовать (без ведома пользователя) пользователя, если не отображается экран согласия.
- Как мы можем избежать необходимости показывать экран согласия для нашего собственного приложения, но при этом быть уверенными, что пользователь максимально безопасен?
Как решить?
- Выполнение отдельного входа в систему office365/google для получения токена обновления из этого idp, а затем реализация способа публичной аутентификации с использованием этого токена для получения долгоживущего токена из нашего веб-приложения.
- Просто игнорируйте недостатки безопасности и никогда не спрашивайте согласия пользователя, учитывая несекретную смесь `clientId/clientSecret/redirectUrl` под предлогом «это довольно сложно взломать».
- Игнорирование недостатков безопасности, если внешний вход в систему с оправданием «google/office365 должен в любом случае отображать экран согласия при запросе токена обновления».
- Какой-то неизвестный способ убедиться, что это не вредоносное приложение/пользователь
Причина, по которой мне не нравится (1) выше, заключается в том, что он одновременно открывает несколько новый поток аутентификации в нашем веб-приложении и заставляет родное приложение реализовывать более сложный поток аутентификации.
Есть ли что-то, что мне здесь не хватает, что будет считаться лучшей практикой?