Flujo OAuth 2 para imgur en el plugin de Discourse

Hola,

Estoy desarrollando un plugin muy específico para nuestra instancia de Discourse y tengo algunas preguntas.

En algún momento, el plugin tendrá que enviar una colección de imágenes de temas de Discourse a Imgur. La parte que recopila esas imágenes ya está lista.

Ahora estoy intentando autenticarme en la API de Imgur usando su flujo OAuth2. Ya he creado una interfaz de administración para el plugin que permite pulsar un botón para autorizar el plugin en tu cuenta de Imgur. Una vez que el usuario inicia sesión, se llama a una URL de devolución de llamada (configurada como mi instancia de Discourse y una ruta específica que creé en el plugin) con el token de acceso (véase el ejemplo).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

Mi pregunta es: ¿cómo puedo obtener este token de vuelta? No tengo idea de por dónde empezar.

Mi entendimiento es que, como el token se devuelve en un parámetro de hash, debe hacerse en el lado de JS. Intenté configurar un controlador y una ruta para mi URL de devolución de llamada, pero no logro entender cómo leer la URL (y la parte del hash en particular) desde allí. (No he encontrado nada útil en la documentación de Ember.js o en Stack Overflow). Intenté configurar diferentes escuchadores de eventos, pero nunca parecen activarse.

Mi segunda pregunta es: ¿dónde debería almacenar el token y el token de actualización? ¿Puedo guardarlo como una configuración del sistema desde el plugin? He oído hablar del PluginStore, pero solo es accesible en Ruby (lo que significaría crear un punto de conexión para que el cliente envíe estos tokens al servidor). Además, ¿es seguro desde el punto de vista de la seguridad?

¡Gracias!

Edición: Tenía un error tipográfico en el nombre de archivo de mi ruta, faltaba una ‘s’, por eso no se activó nada…

No podrás lograr esto mediante HTTP en localhost. Se recomienda que vayas a necesitar simular HTTPS con una herramienta como https://ngrok.com/ o ejecutar tu servidor de desarrollo en la nube en modo HTTPS con un dominio.

Pensé que también necesitaría eso, pero sí me redirigen correctamente a mi URL local y veo el token en la URL.

Sí, tienes razón, el cliente puede usar HTTP. El problema es que puede ser interceptado y los tokens leídos, por lo que no tiene sentido usar OAuth2 en primer lugar :). Personalmente, también me sentiría más cómodo trabajando con el protocolo final completo en desarrollo para saber que mi código funciona.

Sí, definitivamente estoy de acuerdo, esto solo era para fines de desarrollo en este momento. Por supuesto, en producción usaría https :slight_smile: