Integrationen

Single Sign-On

Leser, die auf Ihrer Website angemeldet sind, sind auch in den Kommentaren angemeldet. Kein zweites Konto, keine zweite Anmeldung.

So funktioniert es

  1. Solange ein Leser auf Ihrer Website angemeldet ist, signiert Ihr Backend ein kurzlebiges Token, das sagt, wer er ist.
  2. Ihre Seite übergibt dieses Token im Attribut sso-token an das Kommentar-Widget.
  3. Crowment prüft die Signatur und meldet den Leser mit dieser Identität in den Kommentaren an.

Das Token wird mit einem Geheimnis signiert, das nur Ihr Server und Crowment kennen; niemand kann Leser also als jemand anderen anmelden. Single Sign-On ist in jedem Tarif verfügbar.

1. Einschalten

Öffnen Sie Site Console → Ihr Widget → Single Sign-On. Inhaber und Admins können die Einstellungen ändern.

Das Signiergeheimnis erstellen

Das kann nur der Inhaber des Widgets. Das Geheimnis wird nur einmal angezeigt: Speichern Sie es in den Umgebungsvariablen Ihres Backends, zum Beispiel als CROWMENT_SSO_SECRET. Legen Sie es nie in Browser-Code, ein App-Bundle oder ein öffentliches Repository.

Einen Modus wählen

  • Off: Leser melden sich nur mit Crowment an.
  • Optional: Auf Ihrer Website angemeldete Leser werden automatisch angemeldet; die Anmeldung mit Crowment bleibt verfügbar.
  • Required: Nur Konten Ihrer Website können sich anmelden. Bestehende Kommentare und Sitzungen bleiben erhalten.

An- und Abmeldeseite festlegen (optional)

Beide müssen auf der Domain Ihres Widgets liegen. Die Anmeldeschaltfläche des Widgets schickt Leser zu Ihrer Anmeldeseite, mit einem Parameter return_to, der die Herkunftsseite enthält. Prüfen Sie, dass return_to auf Ihre eigene Website zeigt, bevor Sie dorthin weiterleiten.

2. Ein Token auf Ihrem Server signieren

Signieren Sie bei jedem Seitenaufruf, bei dem ein Leser angemeldet ist, ein JWT mit HS256 und Ihrem Geheimnis.

ClaimPflichtWert
subjaDie Benutzer-ID des Lesers auf Ihrer Website, als String, höchstens 128 Zeichen. Verwenden Sie eine ID, die sich nie ändert und nie wiederverwendet wird; eine E-Mail-Adresse ist eine schlechte Wahl.
namejaDer Name neben seinen Kommentaren, bis 100 Zeichen. HTML wird entfernt.
avatarneinEine https://-Bild-URL. Alles andere wird ignoriert.
badgesneinSchlüssel der Abzeichen des Lesers, z. B. ["vip"], passend zu den SSO-Schlüsseln unter Badges. Fehlt der Claim, bleiben die Abzeichen unverändert; [] entfernt die auf diesem Weg vergebenen. Im Dashboard vergebene Abzeichen bleiben.
audjaDer App Key Ihres Widgets, genau wie im Einbettungscode.
iat, expjaAusstellungs- und Ablaufzeit in Sekunden. Das Token darf höchstens eine Stunde gültig sein. Eine Minute Uhrenabweichung wird toleriert.

Ein Claim email ist nicht nötig und wird nicht verwendet: Crowment ordnet Konten nie über die E-Mail-Adresse zu.

// npm install jsonwebtoken
import jwt from 'jsonwebtoken'

const ssoToken = jwt.sign(
  { sub: String(user.id), name: user.displayName, avatar: user.avatarUrl },
  process.env.CROWMENT_SSO_SECRET,
  { algorithm: 'HS256', audience: CROWMENT_APP_KEY, expiresIn: '1h' },
)

3. An das Widget übergeben

Bei serverseitig gerenderten Seiten setzen Sie das Token in den Einbettungscode:

<script defer src="https://embeds.crowment.com/comments.js"></script>

<!-- signed in: pass the token your backend signed for this page view -->
<crow-comments app-key="YOUR_APP_KEY" sso-token="SIGNED_TOKEN"></crow-comments>

<!-- signed out: leave sso-token out -->
<crow-comments app-key="YOUR_APP_KEY"></crow-comments>

Übergeben Sie auf jeder Seite, auf der der Leser angemeldet ist, ein Token. Eine Seite ohne Token sagt dem Widget, dass sich der Leser abgemeldet hat, und das Widget meldet ihn auch in den Kommentaren ab. Weitere Seitenaufrufe melden ihn nicht jedes Mal neu an: Das Widget behält seine Sitzung und tauscht nur ein neues Token ein, wenn sich der Leser ändert.

In einer Single-Page-App setzen und entfernen Sie das Attribut, wenn sich Ihr Anmeldestatus ändert, und hören auf die Ereignisse des Widgets:

const widget = document.querySelector('crow-comments')

// after your site signs the reader in
widget.setAttribute('sso-token', await fetchCrowmentToken())

// after your site signs the reader out
widget.removeAttribute('sso-token')

// the token expired while the page was open: hand over a fresh one
widget.addEventListener('crow:sso-expired', async () => {
  widget.setAttribute('sso-token', await fetchCrowmentToken())
})

// Required mode without a sign-in page: show your own login
widget.addEventListener('crow:login-required', () => openLoginDialog())
  • crow:sso-expired: Das Widget musste den Leser anmelden, aber das Token war abgelaufen. Setzen Sie ein neues.
  • crow:login-required: Modus Required, keine Anmeldeseite festgelegt, und der Leser hat auf die Anmeldeschaltfläche geklickt.

Leser, die sich über Ihre Website angemeldet haben, melden sich auch dort ab. Ohne Abmeldeseite blendet das Widget seine eigene Abmeldeschaltfläche aus, denn ein fehlendes Token auf der nächsten Seite meldet sie ohnehin ab.

4. Kontoverknüpfung

Ein Leser, der bereits ein Crowment-Konto hat, kann es im Kommentarbereich über das Link-Symbol neben seinem Avatar verknüpfen. Er meldet sich in einem Pop-up bei Crowment an und bestätigt auf einer Crowment-Seite. Von da an meldet Ihre Website ihn mit seinem Crowment-Konto an, und die Kommentare, die er mit seinem Website-Konto geschrieben hat, gehen auf dieses über.

Die Verknüpfung erlaubt Ihrer Website, diesen Leser auf Ihren eigenen Seiten mit seinem Crowment-Konto anzumelden; die Bestätigungsseite weist darauf hin. Er kann die Verknüpfung jederzeit in der User Console unter Profile → Linked sites aufheben; seine Kommentare bleiben bei ihm. Sie können die Verknüpfung in den SSO-Einstellungen unter Account linking abschalten.

Namen und Avatare aus Ihrem Token aktualisieren das Kommentarprofil des Lesers bei jeder Anmeldung. Verknüpfte Crowment-Konten behalten ihren eigenen Namen und Avatar.

Sicherheit

  • Bewahren Sie das Geheimnis auf Ihrem Server auf. Wer es besitzt, kann Leser auf Ihrer Website als beliebige Person anmelden.
  • Wenn es durchsickert, wählen Sie Replace secret. Mit dem alten Geheimnis signierte Tokens funktionieren sofort nicht mehr, setzen Sie das neue also umgehend ein. Bereits in den Kommentaren angemeldete Leser bleiben angemeldet.
  • Signieren Sie Tokens nur für den Leser der aktuellen Anfrage und halten Sie sie kurzlebig.

Fehlerbehebung

SymptomWahrscheinliche Ursache
invalid_sso_tokenFalsches oder ersetztes Geheimnis, aud ist nicht der App Key, ein anderer Algorithmus als HS256, sub als Zahl gesendet, ein leerer name oder eine Gültigkeit über einer Stunde.
sso_token_expiredDas exp des Tokens ist überschritten oder Ihre Serveruhr geht falsch. Signieren Sie pro Seitenaufruf ein neues Token.
SSO is not enabled for this appDer Modus ist Off oder es wurde kein Geheimnis erstellt.
Request origin does not matchDie Seite liegt nicht auf der Domain Ihres Widgets oder einer ihrer Subdomains.