I should note there are security issues with making that api key visible to users. If someone has it, they can do anything that the underlying user account can do. It would be much better to fetch the RSS server side using the key then only exposing the resulting feed.
Also, be especially careful not to generate an “All Users” key for this. If someone gets that key they can do anything as any user on your site. So just be extra careful
We are having the issue that the RSS feeds do not work with an api_key if the categories have read restrictions, even if the api_key is valid for a user that should be able to access the category.
¡Sí, lo hacen! @blake, ¿tienes alguna idea sobre cómo las personas podrían usar feeds RSS privados en el mundo actual? ¿Los navegadores o lectores de feeds RSS admiten encabezados personalizados para la autenticación?
Este es un caso de uso bastante raro, pero sería genial si tuviéramos una solución alternativa.
Lo único relacionado con la autenticación en RSS es el soporte para autenticación básica basada en URL, como https://usuario:contraseña@www.ejemplo.com (lo cual no tenemos implementado) o algo similar a lo que actualmente soportamos con api_key y api_username en la URL.
Aunque habría sido ideal eliminar por completo la autenticación basada en URL, creo que el camino a seguir, para seguir dando soporte a feeds RSS privados, es permitir este tipo de autenticación solo para feeds de temas o categorías, y más adelante también podríamos agregar soporte para claves de API de solo lectura.
El problema también es que los lectores de RSS suelen tener un solo campo de URL para agregar un feed, por lo que incluso si RSS tuviera soporte para encabezados, los lectores no tendrían un lugar para agregar credenciales a un encabezado.
Una idea relacionada con parte del trabajo de alcance de @david es que podríamos crear una clave de API de usuario que esté estrictamente acotada a un solo feed RSS. De esta manera, la superficie de ataque es baja, y en casos como ese, donde tenemos una clave de API de usuario ultra acotada, podríamos permitir su uso sin encabezados (una columna en user_api_key para indicar que esta clave puede usar GET para autenticación).
Los desafíos aquí son:
No tenemos un mecanismo para que los usuarios generen claves de API de usuario; tendríamos que construir algo para el caso de uso de RSS, lo que implicaría una nueva experiencia de usuario (UX). No estoy seguro de dónde la agregaríamos, quizás en el perfil del usuario, no lo sé.
No tenemos un mecanismo para acotar el acceso a un solo feed RSS específico, lo cual tendríamos que agregar.
No tenemos un indicador para “clave de API de usuario permitida” mediante parámetros GET en la URL, lo cual sería necesario para esto.
En general, veo esto como algo que podríamos resolver, pero probablemente estemos hablando de una o dos semanas de trabajo para que funcione perfectamente.
La ventaja es que parte de este trabajo es algo que queremos hacer independientemente de RSS, pero la desventaja es que parte del trabajo está muy estrechamente acoplado a RSS y hay muy pocas personas que utilizan esta función en la actualidad.
Depende de @codinghorror, supongo, decidir cómo queremos priorizar esto.
Tengo WordPress y Discourse integrados, con WordPress gestionando el SSO. Estoy generando una barra lateral con las publicaciones recientes en WordPress mediante feeds RSS de varias categorías usando la API, por lo que me encantaría mantener el mecanismo de autenticación por URL para ello. De lo contrario, tendré que ensuciarme las manos escribiendo un widget personalizado para intentar implementar la opción de autenticación mediante encabezados. Supongo que soy un +1 por las pocas personas que lo utilizan.
¿Alguien puede decirme si esto es compatible actualmente o no?
Me está costando hacerlo funcionar.
Si intento usar la API_KEY en la cadena de consulta, obtengo:
No tienes permiso para ver el recurso solicitado. El nombre de usuario o la clave de la API no son válidos.
Lo que implica que al menos está intentando leer la cadena de consulta.
Actualización:
Vale, esto funciona de alguna manera. Parece que hay un subconjunto de feeds RSS disponibles, pero no todos. Al revisar la configuración de la clave de API, parece que podemos acceder a:
Leer
/t/:slug/:topic_id.rss
Leer listas
/c/*category_slug_path_with_id.rss
/top/all.rss
/top/yearly.rss
/top/quarterly.rss
/top/monthly.rss
/top/weekly.rss
/top/daily.rss
¿Alguien sabe por qué esto excluye los básicos /latest.rss y /top.rss?
Parece que al obtener el RSS con una clave de API, es necesario especificar un encabezado de aceptación para recuperar los datos correctos.
Si obtienes el RSS sin especificar el encabezado de aceptación, como en curl https://bbs.example.com/c/cat.rss?api_key=KEY, podría resultar en una página < HTTP/1.1 404 Not Found.
Sin embargo, al especificar el encabezado de aceptación, el XML del RSS se puede recuperar correctamente. Por ejemplo: