Невозможно установить вызов кода PKCE с AppAuth отдельно от верификатора кода в меж-клиентской аутентификации Google
Связанный с этой проблемой и этим (setCodeVerifier) API в AppAuth
Похоже, мы не можем установить только вызов кода отдельно и игнорировать часть верификатора кода потока кода проверки подлинности AppAuth, которая предотвращает следующий поток, включающий службу с мобильным приложением и связанный бэкэнд:
- Мобильное приложение запрашивает доступ к API бэкэнд-сервера
- Бэкэнд-сервер отрицает необходимость входа
- Внутренний сервер создает вызов кода PKCE и верификатор кода
- Внутренний сервер отправляет вызов кода (но не верификатор) мобильному приложению вместе с внутренним сервером Oauth2 clientId
- Мобильное приложение выполняет предоставление кода авторизации с помощью запроса кода, предоставляемого внутренним сервером и внутренним сервером clientId
- Мобильное приложение отправляет код авторизации обратно на бэкэнд-сервер (обратите внимание, что без верификатора еще никто не имеет всех частей для получения токенов доступа /id)
- Внутренний сервер теперь обменивается кодом авторизации с проверяющим код, который он знает только для маркеров доступа / идентификатора, и создает пользовательский сеанс на внутреннем сервере.
- Теперь токен доступа / идентификатора можно отправить обратно в мобильное приложение для использования с API Google, а также использовать для делегированного управления доступом к внутреннему серверу приложения. То есть. наше мобильное приложение для взаимодействия с внутренним сервером защищено с помощью того же токена доступа / идентификатора, который используется для защиты связи между нашим внутренним сервисом и серверами ресурсов Google.
Вышеуказанная проблема связанного с переполнением стека говорит, что PKCE не требуется в случае секретного клиента, использующего серверные части, но это все еще открывает мобильное приложение от перехвата ключа авторизации. Если я что-то упустил, разве предложенный выше поток не даст только бэкэнд-серверу возможность получать токены доступа / идентификатора, в то же время позволяя пользователю получить все преимущества Oauth2 в нативном приложении?
Кажется, что это невозможно с текущим API AppAuth или любыми другими библиотеками, которые я нашел где-либо. Я что-то пропустил? По сути, вы можете видеть мобильное приложение как интерфейс входа в Oauth2 для внутреннего сервера, который является настоящим клиентским приложением.
Заранее спасибо.
Для дальнейшего использования, свойства дизайна, которые я искал, которые привели меня к следующему:
- Мобильное приложение, поддерживаемое серверным веб-сервером
- Вход в Google Oauth2 с использованием кода авторизации
- Защита кода авторизации через PKCE
- Совместное использование токенов между клиентами (технически существует только один клиент, поэтому, я думаю, более правильно описать собственное мобильное приложение и серверную часть как своего рода двухкомпонентный клиент, который разделяет ответственность за поток проверки подлинности кода Oauth2 и результирующие токены)
- Single ClientId (внутренний сервер)
- Снятие необходимости в ClientSecret даже на бэкэнде