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.
Ja, das tun sie! @blake, hast du Gedanken dazu, wie Leute private RSS-Feeds in der heutigen Welt nutzen können. Unterstützen Browser oder RSS-Feed-Dienste benutzerdefinierte Header für die Authentifizierung?
Das ist ein ziemlich seltenes Anwendungsszenario, aber es wäre schön, wenn es eine Workaround-Lösung gäbe.
Das einzige mit Authentifizierung verbundene Thema bei RSS ist die Unterstützung für URL-basierte Basic-Authentifizierung wie https://user:password@www.example.com (wofür wir keine Unterstützung bieten) oder etwas Ähnliches wie die derzeitige Unterstützung für api_key und api_username in der URL.
Obwohl es schön gewesen wäre, die URL-basierte Authentifizierung vollständig abzuschaffen, ist der beste Weg, um weiterhin private RSS-Feeds zu unterstützen, diese Art der Authentifizierung nur für Themen-/Kategorie-Feeds zuzulassen. Später können wir dann auch Unterstützung für schreibgeschützte API-Schlüssel hinzufügen.
Das Problem besteht zudem darin, dass RSS-Reader in der Regel nur ein einzelnes URL-Feld zum Hinzufügen eines Feeds haben. Selbst wenn RSS Unterstützung für Header hätte, hätten die Reader keinen Ort, um Anmeldeinformationen in einen Header einzufügen.
Eine Idee, die sich auf einige der Abgrenzungsarbeiten von @david bezieht, wäre, einen User-API-Schlüssel zu erstellen, der eng auf einen einzigen RSS-Feed beschränkt ist. So wäre die Angriffsfläche gering, und in solchen Fällen, in denen wir einen extrem eingeschränkten User-API-Schlüssel haben, könnten wir dessen Verwendung ohne Header erlauben (eine Spalte in user_api_key, die angibt, dass dieser Schlüssel für die Authentifizierung GET verwenden darf).
Die Herausforderungen dabei sind:
Wir haben keinen Mechanismus, mit dem Benutzer User-API-Schlüssel generieren können. Wir müssten etwas für den RSS-Anwendungsfall entwickeln, was eine neue UX erfordern würde. Ich bin mir nicht sicher, wo wir das einfügen würden, vielleicht im Benutzerprofil – ich weiß es nicht.
Wir haben keinen Mechanismus, um die Berechtigung nur auf einen bestimmten RSS-Feed einzugrenzen, den wir hinzufügen müssten.
Wir haben kein Flag für „erlaubter User-API-Schlüssel
Ich habe WordPress und Discourse integriert, wobei WordPress für das Single Sign-On (SSO) zuständig ist. Ich generiere eine Seitenleiste mit aktuellen Beiträgen in WordPress, indem ich RSS-Feeds aus mehreren Kategorien über die API verwende. Daher würde ich die URL-Authentifizierungsmethode dafür gerne beibehalten. Andernfalls müsste ich mir die Hände schmutzig machen und ein benutzerdefiniertes Widget schreiben, um die Header-Authentifizierungsoption zu implementieren. Ich zähle mich also zu den wenigen Nutzern, die das unterstützen (+1).
Kann mir jemand sagen, ob dies derzeit unterstützt wird oder nicht?
Ich habe Schwierigkeiten, es zum Laufen zu bringen.
Wenn ich versuche, den API_KEY in der Abfragezeichenfolge zu verwenden, erhalte ich:
Sie sind nicht berechtigt, die angeforderte Ressource anzuzeigen. Der API-Benutzername oder der Schlüssel ist ungültig.
Das deutet darauf hin, dass zumindest die Abfragezeichenfolge gelesen wird.
Update:
OK, es funktioniert jetzt irgendwie. Es scheint, dass ein Teil der RSS-Feeds verfügbar ist, aber nicht alle? Wenn ich die API-Schlüssel-Einstellungen betrachte, scheint es, dass wir Zugriff auf Folgendes haben:
Lesen
/t/:slug/:topic_id.rss
Listen lesen
/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
Weiß jemand, warum dies die grundlegenden Feeds /latest.rss und /top.rssausschließt?
Es scheint, dass beim Abrufen des RSS-Feeds mit einem API-Schlüssel ein Accept-Header angegeben werden muss, um die richtigen Daten zu erhalten.
Wenn der RSS-Feed ohne Angabe des Accept-Headers abgerufen wird, z. B. curl https://bbs.example.com/c/cat.rss?api_key=KEY, kann dies zu einer \u003c HTTP/1.1 404 Not Found-Seite führen.
Mit Angabe des Accept-Headers kann das XML für den RSS-Feed jedoch korrekt abgerufen werden. Zum Beispiel: