Порядок авторизации Android Google OAuth Flet/FlutterPython

Программы на Python
Ответить
Anonymous
 Порядок авторизации Android Google OAuth Flet/Flutter

Сообщение Anonymous »

Я занимаюсь программированием Vibe ✨ (извините, ха-ха, пытаюсь научиться) — с некоторыми знаниями API и механизмов OAuth 2.0, но в другом контексте (Microsoft Entra)...
Использую Flet для упаковки приложения Python.
Я следую своему носу и пытаюсь протестировать специальное приложение для Android, которое я просто устанавливаю на свой телефон. Я могу сгенерировать код авторизации, автоматически открыв URL-адрес аутентификации в браузере и Google, предоставив обычную информацию о согласии - затем пользователь может вставить его обратно в приложение, чтобы получить токен доступа, который использует клиент Oauth «Deskstop» в облаке Google. Я начал с этого, потому что оно также работает при запуске приложения flet на моем рабочем столе Windows.
Я понимаю, что мне следует использовать Android с соответствующим идентификатором клиента, что я пытаюсь сделать, но не могу, хоть убей, выяснить, как правильно вызвать поток OAuth. Google сообщает об ошибке 400,valid_request: «Детали запроса: redirect_uri=appname://callback»
»flowName=GeneralOAuthFlow»
Теперь я полностью заблудился, и ИИ водит меня кругами. Я пытаюсь следовать официальной документации, но они отсылают меня к Kotlin/Java, что меня смущает.
Когда я собираю свой APK, я добавляю общее имя пакета, соответствующее имени пакета идентификатора клиента в облаке Google и механизму глубоких ссылок:
"-deep-linking-scheme booktracker --deep-linking-host callback --org com.silallybren.appname"
с пониманием, что я Судя по тому, что я читаю, на Android он даже не нужен... Я также попробовал включить «Включить пользовательскую схему URI» в настройках клиента Google Cloud Android OAuth.
Модули Python:

Код: Выделить всё

from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
Хотя, как я полагаю, это больше связано с обработкой токенов.

Код: Выделить всё

        """Generate the OAuth URL"""
params = {
'client_id': get_client_id(),
'redirect_uri': get_redirect_uri(),
'response_type': 'code',
'scope': ' '.join(SCOPES),
'access_type': 'offline',
'prompt': 'consent',
}
return f"https://accounts.google.com/o/oauth2/auth?{urllib.parse.urlencode(params)}"
Дайте мне знать, если вы хотите увидеть что-нибудь еще, но я динамически получаю идентификатор клиента и перенаправляю URI в зависимости от ОС, на которой работает приложение flet, поэтому я могу использовать правильный идентификатор клиента из облака Google. Не уверен, что это правильно, но это было в первую очередь для целей тестирования. Я также прочитал документацию по флоту, но я как бы уперся в кирпичную стену и провел слишком много часов, которые теперь тону, ха-ха. Я понимаю, что облако Google заявляет, что мне не нужно использовать собственный URI, но я включил его, надеясь, что он разрешит URL-адрес обратного вызова. Учитывая, что приложение работает и разрешения работают правильно, я просто пытаюсь понять и правильно перенаправить поток входа в систему. Я понимаю, что приложение должно каким-то образом «отловить» перенаправление, эта часть меня совершенно теряет, но в Python агент ИИ дал мне это:

Код: Выделить всё

def on_route_change(e):
route = page.route
# Check if this is an OAuth callback
if route and '/callback' in route:
# Extract code from URL params (e.g., /callback?code=ABC123)
if '?' in route:
params = route.split('?')[1]
for param in params.split('&'):
if param.startswith('code='):
code = param[5:]  # Remove 'code='
# URL decode the code
import urllib.parse
code = urllib.parse.unquote(code)
self._handle_oauth_callback(code)
return

page.on_route_change = on_route_change

Я не уверен, что это правильный механизм, но, учитывая, что я застрял на веб-странице авторизации Google, меня пока не слишком беспокоит этот шаг.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ation-flow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»