Zum Inhalt springen

Browser-Anmeldung

Wie codecharter login eine Entwicklermaschine über den Browser anmeldet, was ein Device-Token ist und was der Logout bewirkt.

codecharter login meldet eine einzelne Maschine über Ihre normale Browser-Session am Portal an. Das ist der bequeme Weg, eine Entwickler-Workstation zu lizenzieren: kein API-Key, den Sie herumkopieren, keine Lizenzdatei, die Sie von Hand herunterladen. Die Maschine erhält ein Device-Token, das genau eines kann, nämlich eine kurzlebige Lizenz für Ihren Account erneuern, und das Sie jederzeit im Portal widerrufen können.

Für das CI und andere Umgebungen ohne Browser bleibt der API-Key das richtige Credential. Was wo gilt, steht unter Credentials und Reihenfolge.

Anmelden

Führen Sie den Befehl auf der Maschine aus, die Sie anmelden wollen:

codecharter login

Die CLI startet eine Anmeldung beim Portal und öffnet Ihren Standardbrowser auf der Bestätigungsseite. Sie gibt Seite und Code zusätzlich aus, damit auch eine SSH-Session oder eine Maschine ohne Desktop funktioniert:

Your browser has been opened to complete the sign-in.

    https://codecharter.tools/activate
    Code: 7QRX-4KTB

Konnte kein Browser geöffnet werden, lautet die erste Zeile stattdessen "Open this page in a browser to complete the sign-in:", und Sie öffnen die ausgegebene Seite selbst, von einem beliebigen Gerät aus. Der Browser, in dem Sie bestätigen, muss nicht auf der Maschine laufen, die sich anmeldet.

Der Code besteht aus acht Zeichen in zwei Vierergruppen. Er verwendet nur die Ziffern 2 bis 9 und Großbuchstaben ohne I und O, damit beim Ablesen vom einen und Eintippen ins andere Fenster nichts zu verwechseln ist. Er ist zehn Minuten gültig, danach muss die Anmeldung neu gestartet werden.

Während Sie bestätigen, fragt die CLI beim Portal immer wieder nach und gibt Waiting for you to confirm the code... aus.

Im Browser bestätigen

Die Bestätigungsseite ist /activate und setzt voraus, dass Sie am Portal angemeldet sind. Sind Sie das nicht, landen Sie zuerst auf der normalen Login-Seite und werden danach zurückgeführt. Wenn die CLI den Browser geöffnet hat, ist der Code bereits eingetragen; angezeigt und explizit bestätigt wird er in jedem Fall.

Die Seite zeigt vor der Entscheidung zwei Dinge:

  • Gerät, also wie die Maschine sich ausweist. Die CLI sendet CodeCharter CLI on <Maschinenname>.
  • Code, damit Sie ihn mit dem im Terminal vergleichen können.

Vergleichen Sie beides. Wenn Ihnen jemand anderes einen Code geschickt hat, bestätigen Sie ihn nicht: Eine Bestätigung gibt dieser Maschine das Recht, bis zum Widerruf Lizenzen für Ihren Account zu erneuern. Mit Bestätigen schließen Sie die Anmeldung ab, mit Ablehnen weisen Sie sie zurück.

Nach der Bestätigung

Sobald Sie bestätigt haben, speichert die CLI die Credentials und ist fertig:

Signed in. The device token and license are stored on this machine.

Der Befehl endet mit Exit-Code 0. Alle lizenzpflichtigen Befehle funktionieren auf dieser Maschine ab jetzt ohne weitere Konfiguration, und die Lizenz wird kurz vor Ablauf automatisch aus dem gespeicherten Device-Token erneuert.

Lehnen Sie die Anmeldung ab, gibt die CLI Sign-in was denied in the browser. aus und endet mit Exit-Code 1. Laufen die zehn Minuten ab, gibt sie The code expired before it was confirmed. Run 'codecharter login' again. aus und endet ebenfalls mit Exit-Code 1. Ist Ihr Abo zwischen Bestätigung und nächster Abfrage ausgelaufen, gibt sie Your account has no active subscription. Visit the portal to start a trial or subscribe. aus und hört dort auf, statt den Code auszuwarten. Schließen Sie im Portal ein Abo ab und führen Sie codecharter login erneut aus, dann zeigt die CLI Ihnen einen neuen Code zum Bestätigen.

Was wo gespeichert wird

Es werden zwei Dateien in Ihrem benutzereigenen Konfigverzeichnis abgelegt, also dort, wo auch der Lizenz-Cache liegt:

Datei Inhalt
codecharter.device-token Das Device-Token dieser Maschine
codecharter.license Die zusammen damit ausgestellte kurzlebige Lizenz

Das Verzeichnis ist $XDG_CONFIG_HOME/codecharter unter Linux und macOS, %APPDATA%\CodeCharter unter Windows, mit $HOME/.config/codecharter als Fallback für Unix-Systeme ohne XDG_CONFIG_HOME. Unter Unix wird die Token-Datei nur für den Eigentümer lesbar angelegt, sie ist also zu keinem Zeitpunkt für andere Konten auf der Maschine lesbar.

Kann die CLI kein benutzereigenes Konfigverzeichnis ermitteln, meldet sie "signed in, but no per-user config directory was found to store the credentials" und endet mit Exit-Code 1. Es wird dann nichts gespeichert, führen Sie den Befehl einfach erneut aus, sobald eines der Verzeichnisse oben verfügbar ist.

Was ein Device-Token darf

Ein Device-Token beginnt mit cgd_ und hat genau eine Berechtigung: eine kurzlebige Lizenz für Ihren Account ausstellen. Mehr kann es nicht.

  • Es kann nicht Ihre Regeln, Profile oder Entwürfe lesen oder ändern.
  • Es kann nicht CLI-Archive herunterladen oder Checks veröffentlichen.
  • Jeder Portal-Endpunkt außer der Lizenzerneuerung weist es mit 403 Forbidden ab, unabhängig davon, was Ihr Account sonst darf.

Das ist der praktische Unterschied zum API-Key, der read:rules und optional write:rules trägt. Ein geleaktes Device-Token taugt nicht dazu, Ihre Regelinhalte zu lesen, und auch nicht dazu, etwas hochzuladen.

Das Token selbst hat kein Ablaufdatum. Es bleibt gültig, bis Sie es im Portal widerrufen, weshalb das Portal Ihnen jede angemeldete Maschine auflistet, siehe Autorisierte Geräte.

Als welches Konto eine Maschine angemeldet ist

Eine Maschine ist als die Person angemeldet, die den Code im Browser bestätigt, und die erneuerte Lizenz ist die dieses Kontos. Dieses Konto braucht ein aktives Abo. Fehlt es, sagt die Bestätigungsseite das, statt die Bestätigung anzunehmen, und Ihr Code bleibt gültig: Starten Sie eine Testphase oder schließen Sie ein Abo ab und bestätigen Sie denselben Code danach, solange die zehn Minuten noch laufen. Ein Gerät, das Sie nicht kennen, können Sie unabhängig vom Abo ablehnen.

Die Browser-Anmeldung deckt also Ihre eigenen Maschinen ab, nicht die Ihrer Kolleginnen und Kollegen. Das Portal arbeitet mit einem Einzelkonto-Modell, im Team bleibt die Lizenzdatei der Weg, alle anderen zu lizenzieren, siehe CodeCharter im Team ausrollen. Eine angemeldete Maschine verbraucht oder belegt keinen Sitz, Sitze zählen pro Entwickler, nicht pro Geräteeintrag.

Aktuellen Stand prüfen

codecharter auth status zeigt, mit welchem Credential sich diese Maschine authentifizieren würde, ohne das Credential selbst jemals auszugeben:

Portal:      https://codecharter.tools
Credential:  device token (/home/you/.config/codecharter/codecharter.device-token)
License:     valid, plan Team, expires 2026-08-01 09:14:22Z

Die Zeile Credential lautet API key from CODECHARTER_API_KEY, wenn die Umgebungsvariable gesetzt ist, device token (<Pfad>), wenn diese Maschine angemeldet ist, und none - run 'codecharter login', or set CODECHARTER_API_KEY, wenn beides fehlt.

Da weder Key noch Token ausgegeben werden, können Sie die Ausgabe bedenkenlos in eine Support-Anfrage kopieren. Mit --json erhalten Sie ein maschinenlesbares Objekt mit den Feldern portal_url, credential (api_key, device_token oder none), device_token_path sowie ein license-Objekt mit valid, plan, expires_at und message. Der Befehl ist nicht lizenzpflichtig und endet immer mit Exit-Code 0.

Abmelden

codecharter logout

Das entfernt das gespeicherte Device-Token von dieser Maschine:

Signed out. The stored device token was removed from this machine.
The cached license is left in place and will simply expire; it is no longer renewed from here.

Zwei Punkte sind hier wichtig.

Der Logout ist lokal. Er entfernt das Token von dieser Maschine, macht es im Portal aber nicht ungültig. Um eine Maschine dauerhaft auszusperren, etwa weil Sie keinen Zugriff mehr darauf haben, widerrufen Sie das Gerät stattdessen im Portal, siehe Autorisierte Geräte.

Die gecachte Lizenz bleibt bewusst liegen. Sie kann aus einem API-Key oder von einem Installer stammen statt aus einer Browser-Anmeldung, ein Löschen würde also Setups zerstören, die der Logout nie angefasst hat. Sie ist kurzlebig, und ohne Token erneuert sie niemand mehr.

War kein Token gespeichert, meldet der Befehl "Not signed in on this machine; there was no stored device token to remove." So oder so endet er mit Exit-Code 0, Sie können ihn also ohne Sonderfälle in ein Aufräumskript packen.

Optionen

Option Befehl Wirkung
--portal-url <url> login An einem anderen Portal als dem konfigurierten anmelden
--json login Die Anmeldung als zeilenweise JSON-Events ausgeben
--json auth status Maschinenlesbares JSON statt Text ausgeben
--license <pfad> auth status Eine bestimmte Lizenzdatei statt des Standard-Suchpfads prüfen

login, logout und auth status sind nicht lizenzpflichtig. Sie sind der Weg, auf dem eine Maschine überhaupt erst zu einer Lizenz kommt, eine Lizenz vorauszusetzen wäre also zirkulär.

Ohne --portal-url nutzt login die Umgebungsvariable CODECHARTER_PORTAL_URL, sofern sie gesetzt ist, und sonst das konfigurierte Portal. Akzeptiert werden nur https-URLs, dazu http auf Loopback für die lokale Entwicklung.

Die Anmeldung skripten

codecharter login --json schreibt ein JSON-Objekt pro Zeile auf die Standardausgabe, damit eine Editor-Erweiterung oder ein Skript der Anmeldung folgen kann, ohne Fließtext zu parsen:

{"event":"code","verification_uri":"https://codecharter.tools/activate","user_code":"7QRX-4KTB"}
{"event":"status","status":"pending"}
{"event":"status","status":"success"}

Das status-Vokabular ist pending, success, denied, expired und subscription_required. Der letzte Wert beendet die Anmeldung sofort, sobald das Portal ihn meldet, statt den Code auslaufen zu lassen. Fehler gehen als {"event":"error","message":"..."} auf die Standardfehlerausgabe, damit der Event-Stream auf der Standardausgabe sauber bleibt.

Troubleshooting

Der Browser öffnet sich, aber der Code wird nicht akzeptiert

Codes sind zehn Minuten gültig. Stand das Terminal länger offen, ist der Code weg und die Seite sagt das auch. Führen Sie codecharter login erneut aus und nehmen Sie den neuen Code.

"Ihr Konto hat kein aktives Abo"

Eine bestätigte Anmeldung stellt nur dann eine Lizenz aus, wenn der bestätigende Account ein aktives Abo hat. Zwei Stellen sagen Ihnen, wenn das nicht der Fall ist, und keine davon kostet Sie den Code:

  • Im Browser. Die Bestätigungsseite lehnt die Bestätigung ab und erklärt warum, mit einem Link zu Ihrer Abrechnungsseite. Es wird nichts gespeichert, der Code bleibt gültig und die Maschine wartet weiter. Schließen Sie in einem zweiten Tab ein Abo ab, kommen Sie zurück und bestätigen Sie denselben Code, dann läuft die Anmeldung normal durch.
  • Auf der wartenden Maschine. Ist das Abo erst nach der Bestätigung abgelaufen, gibt die CLI sofort Your account has no active subscription. Visit the portal to start a trial or subscribe. aus und endet mit Exit-Code 1, statt auf den Ablauf des Codes zu warten. Da der Befehl damit schon beendet ist, führen Sie nach dem Abschluss des Abos codecharter login erneut aus und bestätigen den neuen Code.

In keinem der beiden Fälle wird Ihre Bestätigung verbraucht, im Portal bleibt also nichts halb erledigt zurück.

Viele Anmeldeversuche hintereinander

Die Anmelde-Endpunkte sind pro IP-Adresse ratenbegrenzt. Wenn Sie den Befehl in einer Schleife skripten, antwortet das Portal mit 429 Too Many Requests und einem Retry-After-Header, der die Wartezeit in Sekunden nennt.

Die Maschine ist ein CI-Runner

Melden Sie einen Runner nicht per codecharter login an. Geben Sie ihm stattdessen einen API-Key als Secret, siehe API-Keys in Secrets. Ist ein Runner zufällig eine Maschine, auf der sich einmal jemand angemeldet hat, hat der API-Key aus der Umgebung ohnehin Vorrang, der Job übernimmt also nie die Identität eines Entwicklers.

Weiterführend