Estoy ejecutando un flujo de OAuth estándar con PKCE para obtener un token de acceso de usuario de Snapchat. La solicitud inicial es sencilla. Genero un par PKCE en mi backend de Python usando:
pkce_code_verifier = secrets.token_urlsafe(96) hashed = hashlib.sha256(pkce_code_verifier.encode("ascii")).digest() pkce_code_challenge = base64.urlsafe_b64encode(hashed).decode("ascii")[:-1] return pkce_code_challenge, pkce_code_verifierPaso el desafío del código en mi primera solicitud que devuelve un código con éxito.
Sin embargo, no importa cómo estructure la solicitud de seguimiento para intercambiar el código por un token de acceso, recibo:
{ "error": "invalid_grant", "error_description": "Invalid code_verifier.", "state": "" }Aquí hay un ejemplo de CURL:
curl -X POST https://accounts.snapchat.com/accounts/oauth2/token --header 'Authorization: Basic [redacted]' --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=authorization_code' --data-urlencode 'code=XCd9mUHo9s4osXBvEnmERloR2DjUxR_AA4el_azXnhg' --data-urlencode 'code_verifier=kJ31ekNSvahWwczcea-q9rFI8Grl9-jDOTuXPTDIxfhuf1IEWdRbJAKf4vTeA8vxhzUHBBM9QDcn3NmEqqAlrpz8_PNP573sljIKQIur-lV-BjuWtSHMZb7zby5WpRw6' --data-urlencode 'redirect_uri=[redacted]'¿Alguien ha conseguido que esto funcione? Verifiqué mi desafío de código y mi verificador de código usando algunas de las herramientas PKCE en línea; parecen válidos.
Resulta que fue un problema en expo-auth-session. Lo he documentado aquí: https://forums.expo.dev/t/expo-authsession-pkce-always-leads-to-invalid-code-verifier/63750 .