"Fake" OAuth Provider?

Hallo :wave: Ich frage mich, ob etwas, das ich zu tun versuche, überhaupt möglich wäre.

Ich möchte Minecraft-Konten mit Discourse-Konten verknüpfen, ähnlich wie man Discord, Google usw. hinzufügen kann, aber Minecraft hat derzeit kein OAuth-System (vielleicht, sobald alle zu einem Microsoft-Konto migriert sind, aber das wäre einiges an Wartezeit). Das System, das ich vorschlage, ist, dass der Benutzer einen zufällig generierten Code eingibt, den er im Spiel erhält. Gäbe es eine Möglichkeit, dies wie jedes andere verbundene Konto zu seinem Konto hinzuzufügen? Ich würde es wahrscheinlich ähnlich strukturieren, wie https://mc-oauth.net/ funktioniert, aber anstatt sich anzumelden, würden sie einen Befehl im Chat verwenden.

Wenn dies möglich wäre, haben Sie dann einige Hinweise, wie ich das erreichen könnte? Ich bräuchte so ziemlich nur ein modales Popup, das nach dem Code fragt → Code validieren → UUID abrufen und als externe Kontenkennung speichern.

EDIT: Tatsächlich scheint es, dass ich mit der Umstellung auf Microsoft-Konten das bestehende Microsoft-Konto-Plugin möglicherweise ändern kann, um Minecraft-UUIDs zu speichern. Das muss ich noch sehen.

Sie könnten dafür vielleicht benutzerdefinierte Benutzerfelder verwenden? Creating and configuring custom user fields

Ein Benutzerfeld könnte so eingestellt werden, dass es bei der Anmeldung erforderlich ist und den zufällig generierten Code akzeptiert. Benutzerfelder können auch in den Einstellungen eines Benutzers nach der Anmeldung bearbeitet werden, falls bestehende Konten den Code hinzufügen müssen.

2 „Gefällt mir“

Oooooh, darüber habe ich tatsächlich nicht nachgedacht. Danke für die Idee – der Hauptgrund, warum ich nach einem OAuth-Ansatz gesucht habe, ist, dass ich den Benutzer anhand der externen ID abrufen kann. Ich werde sehen, ob ich möglicherweise einen Benutzer anhand eines Benutzerfeldes abrufen kann.

EDIT: Okay, ich habe tatsächlich einen Weg gefunden, dies mithilfe der benutzerdefinierten Felder zu tun. Ich werde wahrscheinlich eine externe Datenbank verwenden und meinen eigenen Weg entwickeln, um einen Discourse-Benutzer anhand seiner Minecraft-UUID anzufordern. Ich weiß einfach nicht genug über die Einschränkungen von Discourse, um zu wissen, ob es einen besseren Weg gäbe.

EDIT 2: Hmm, ich sehe keine Möglichkeit, benutzerdefinierte Benutzerfelder über die API zu bearbeiten. Idealerweise wollte ich, dass sie nur über die API festgelegt werden, damit garantiert ist, dass sie das Konto besitzen. Ich muss wahrscheinlich eine externe Datenbank erstellen und die Kontoverknüpfung über etwas anderes vornehmen.

1 „Gefällt mir“

Es klingt ein wenig so, als ob Sie Ihren eigenen OAuth-Anbieter implementieren möchten?

Ähnlich wie im Diagramm hier:

Es klingt, als würde Ihr benutzerdefinierter Mechanismus den „OAuth2-Verzeichnis“-Teil ersetzen.

(Es könnte einfacher sein, DiscourseConnect zu verwenden)

Natürlich hängt all dies davon ab, wie Sie die Authentifizierung für die Website bereits implementieren …

Andererseits könnte dies die Dinge übermäßig komplizieren – wir unterstützen benutzerdefinierte Felder nur für Mitarbeiter, die hierfür geeignet sein könnten.

2 „Gefällt mir“

Ja, ich schätze, meine einzige Hauptfrage ist, ob es eine Möglichkeit gäbe, diese Felder über eine API-Route festzulegen, wenn es sich um reine Mitarbeiter handelt? Ich konnte keine Möglichkeit finden, dies automatisch zu tun.

Ich sehe keinen Eintrag in docs.discourse.org dafür. Alle Änderungen, die vom Webbrowser vorgenommen werden, erfolgen über dieselbe API. Daher würde ich Ihnen raten, das Benötigte zu Reverse-Engineering.

1 „Gefällt mir“

Oh, das ist wirklich nützlich – danke fürs Teilen! Ich habe also weiter darüber nachgedacht und recherchiert, wie ich das machen könnte. Ich denke daran, den state-Parameter mit OAuth zu verwenden, damit sich Leute bei ihrem Discourse-Konto anmelden können, und dann diesen Zustand zu verwenden, um die UUID in Minecraft zuzuordnen. Der Zustand wäre einfach ein zufällig generierter Wert, der in einer Datenbank mit der Minecraft-UUID existieren würde. Ich denke, dieser Ansatz sollte funktionieren. Vielen Dank an alle für die Ideen und Ressourcen!

1 „Gefällt mir“

Da ich keinen Zugriff auf die Minecraft-UUID innerhalb von Discourse selbst benötigte, habe ich schließlich ein externes System entwickelt, das sich in Discourse SSO integriert. Ich schätze die Hilfe, und wenn Sie sehen möchten, was ich mir ausgedacht habe, habe ich es hier geteilt. Eines Tages werde ich das vielleicht noch einmal überdenken, sobald Microsoft-Konten für alle Minecraft-Benutzer obligatorisch sind, da es definitiv einen Weg geben würde, ihre APIs zu nutzen, um dieselbe Funktion zu erreichen.

1 „Gefällt mir“