Autorisierung für OneDrive und Google Drive
Die CLI unterstützt die Anmeldung im Browser, die verschlüsselte lokale Speicherung
von Konten, Statusabfragen, die lokale Abmeldung und cloud sync für unveränderliche
Chiffretextobjekte über die Anwendungsordner von OneDrive oder Google Drive.
Aktualisierte Tokens werden vor nachfolgenden Uploads dauerhaft gespeichert. Die
Verifizierung mit echten Konten steht noch aus. Auf jedem Gerät kann pro Anbieter
ein Konto verbunden werden; eine erneute Anmeldung ersetzt das Konto dieses
Anbieters erst, nachdem die neue Autorisierung erfolgreich war.
Vor der Anmeldung
Erstellen/installieren Sie die neue CLI und starten Sie den Daemon mit derselben neuen Version neu:
cargo install --path crates/cli --locked
memories daemon
Führen Sie den Daemon in einem separaten Terminal aus. Entsperren Sie bei Bedarf
Ihre vorhandene Bibliothek in dem Terminal, in dem die Anmeldung erfolgen soll,
und führen Sie anschließend memories sudo aus. Verwenden Sie für jeden Befehl
dasselbe --home/MEMORIES_HOME. Eine neue Bibliothek benötigt zuerst
memories init. Verschieben Sie ihre Datenbank nicht in ein mit der Cloud
synchronisiertes Verzeichnis.
OAuth-Anwendungsregistrierungen werden nicht mitgeliefert. Verwenden Sie Ihre eigenen Registrierungen; die CLI fragt niemals nach dem Passwort Ihres Microsoft- oder Google-Kontos. Authentifizierung und Zustimmung erfolgen auf der Website des Anbieters in Ihrem Browser.
OneDrive-Registrierung
- Erstellen Sie in Microsoft Entra ID eine App-Registrierung. Wählen Sie die
Unterstützung für Konten in einem beliebigen Organisationsverzeichnis und
persönliche Microsoft-Konten, wenn Sie sowohl geschäftliches als auch
persönliches OneDrive benötigen. Dieser Client verwendet den Mandanten
common. - Fügen Sie unter „Authentifizierung“ eine Plattform Mobile und Desktopanwendungen
mit der Umleitungs-URI
http://localhost/oauth/callbackhinzu. Dies ist ein öffentlicher Desktopclient, keine Web- oder SPA-Anwendung. Erstellen Sie für diesen Ablauf kein Clientgeheimnis. - Konfigurieren Sie die delegierten Microsoft Graph-Berechtigungen
User.ReadundFiles.ReadWrite.AppFolder; bei der Anmeldung wird außerdemoffline_accessangefordert. Die Zustimmungsrichtlinie einer Organisation kann eine Genehmigung durch einen Administrator erfordern. - Kopieren Sie die Anwendungs-ID (Client-ID) und führen Sie Folgendes aus:
memories sudo
memories cloud login onedrive --client-id YOUR_MICROSOFT_CLIENT_ID
Der Callback verwendet http://localhost:PORT/oauth/callback. Microsoft ignoriert
den Port beim Abgleich von localhost-Umleitungs-URIs; der Pfad muss mit der
Registrierung übereinstimmen. Der Listener bindet ausschließlich an IPv4-Loopback.
Mit dem optionalen --port PORT wählen Sie einen festen Port; andernfalls wählt
das Betriebssystem einen freien Port.
Alternativ akzeptiert --client-config PATH ein JSON-Objekt mit client_id.
Benutzerdefinierte Autorisierungs-/Token-URLs und Geheimnisse vertraulicher Clients
werden nicht akzeptiert.
Google Drive-Registrierung
- Erstellen/wählen Sie ein Google Cloud-Projekt und aktivieren Sie die Google Drive API.
- Konfigurieren Sie den OAuth-Zustimmungsbildschirm. Wenn sich die App im
Testmodus befindet, fügen Sie Ihr Google-Konto als Testnutzer hinzu. Fordern
Sie
drive.appdatasowieopenid,emailundprofilezur Kontoidentifizierung an. - Erstellen Sie einen OAuth-Client vom Typ Desktop-App und laden Sie dessen
JSON-Datei herunter. Die CLI erwartet den heruntergeladenen Abschnitt
installed, keine Webclient-Konfiguration. - Bewahren Sie die JSON-Datei außerhalb dieses Repositorys auf und führen Sie Folgendes aus:
memories sudo
memories cloud login google-drive --client-config /path/to/google-desktop-client.json
Beispiel für Windows CMD:
memories cloud login google-drive --client-config "%USERPROFILE%\Downloads\google-desktop-client.json"
Der Callback verwendet http://127.0.0.1:PORT/oauth/callback. Der Ablauf für
Desktopanwendungen unterstützt Loopback-Callbacks; ein gehosteter Callbackserver
ist nicht erforderlich. Heruntergeladene Endpunktfelder werden ignoriert: Der
Client verwendet feste offizielle Google-Endpunkte. Das Clientgeheimnis der
installierten App wird, sofern angegeben, aus der JSON-Datei gelesen, niemals aus
einem Befehlsargument. Geheimnisse von Desktop-Apps sind kein Ersatz für PKCE.
Google kann Aktualisierungstokens für Anwendungen im Testmodus ablaufen lassen (üblicherweise nach sieben Tagen, wenn nicht grundlegende Berechtigungsbereiche angefordert werden). Autorisieren Sie die Anwendung bei Bedarf erneut; die Anforderungen für Veröffentlichung und Anbieterprüfung hängen von Ihrer Anwendung ab.
Status, Abbruch und Abmeldung
memories cloud status
memories cloud sync onedrive
memories cloud sync google-drive
memories sudo
memories cloud logout onedrive
memories cloud logout google-drive
Der Status liefert Anbieter, Kontoidentität, Anzeigename/E-Mail-Adresse, Ablaufzeit
des Zugriffstokens und die Information, ob ein Aktualisierungstoken gespeichert
ist. Er liefert niemals Zugriffstokens, Aktualisierungstokens oder Clientgeheimnisse.
sync_enabled zeigt an, dass mindestens ein Cloudkonto verbunden ist. object_sync
meldet nur die Anzahl der Einträge in Ausgangs-/Eingangswarteschlangen. cloud sync
aktualisiert Tokens bei Bedarf vor Übertragungen zum Anbieter; ein abgelaufenes
Zugriffstoken allein bedeutet nicht, dass die Zustimmung beim Anbieter widerrufen wurde.
Die Ablaufzeit wird vorsichtig ab Beginn des Tokenaustauschs berechnet; langsame
Netzwerkantworten oder Abfragen des Kontoprofils verlängern die Tokengültigkeit nicht.
Die Abmeldung entfernt das lokale Konto und bricht jede ausstehende Anmeldung für diesen Anbieter ab. Sie widerruft die Zustimmung auf den Servern von Microsoft oder Google nicht. Verwenden Sie für einen entfernten Widerruf die Einstellungen des Anbieters für verbundene Apps. Das Entfernen lokaler Datensätze garantiert auch keine forensische Löschung aus Speichersnapshots oder älteren lokalen Kopien.
Die Anmeldung ist auf fünf Minuten begrenzt. --no-browser gibt die
Autorisierungs-URL aus, ohne den Browser zu öffnen, wartet aber weiterhin auf
einen Callback auf diesem Computer. Dies ist kein Out-of-Band-Ablauf mit manuell
eingegebenem Code und kein Mechanismus zur Anmeldung auf entfernten Systemen oder
ohne grafische Oberfläche. Bei einer Zeitüberschreitung oder einem normalen Fehler
bricht die CLI ihr ausstehendes Ticket ab. Warten Sie nach einem erzwungenen
Beenden der CLI bis zum Ablauf oder verwenden Sie vor einem erneuten Versuch
cloud logout PROVIDER.
Sicherheit und Lebenszyklus
- OAuth verwendet den Autorisierungscode mit S256 PKCE und einen unvorhersehbaren Zustandswert. Callback-Methode, Host, Ursprung, Pfad, doppelte Felder, Zustand, Ablauf und Wiederholung werden geprüft. Anbieterfehler und Callbackseiten geben keine Codes oder Tokens zurück.
- Das Warten auf den Browser, der Tokenaustausch und Identitätsabfragen laufen im CLI-Prozess außerhalb des Mutex des Daemons und der Datenbanktransaktionen. HTTPS-Anfragen haben begrenzte Zeitüberschreitungen/Antwortgrößen, deaktivieren automatische Weiterleitungen und übernehmen keine Proxys aus der Umgebung. Netzwerkumgebungen, die einen Proxy erfordern, werden von dieser anfänglichen Transportkonfiguration nicht unterstützt.
- Der Daemon stellt ein kurzlebiges Ticket aus, das an Anbieter, Client-ID und lokalen Aufrufer gebunden ist. Das Speichern erfordert erneut sudo; Sperren, Neustarten oder Abmelden macht ausstehende Tickets ungültig. Ein verspätetes HTTP-Ergebnis kann eine abgebrochene Anmeldung nicht wiederherstellen.
- Der lokalen CLI wird vertraut, den Austausch mit dem Anbieter durchzuführen. Der Vorgang des Dienstes zum Schreiben von Tokens erfordert ein gültiges Ticket und erhöhte Berechtigungen; er ist kein entfernter Endpunkt und kann nicht durch MCP verwendet werden. Es gibt keinen Befehl zum Lesen von Tokens.
- Konten und Tokens befinden sich im verschlüsselten lokalen Zustand. Sie sind von exportierten Sicherungen, Gerätefreigabe, Tresorsynchronisierung, Audit-Ausgabe und MCP ausgeschlossen. Jedes Gerät muss sich separat anmelden. Die Cloudanmeldung gewährt keine Tresormitgliedschaft.
- Geheime Daten in Puffern mit eigener Speicherverantwortung werden mit Nullen
überschrieben; HTTP-/URL-/JSON-Bibliotheken und der Betriebssystemspeicher können
vorübergehende Kopien behalten, wie in
SECURITY.mdbeschrieben.
Wenn das Zustandsfeld fehlt, bleibt die Abwärtskompatibilität gewahrt. Öffnen und schreiben Sie einen autorisierten Speicher nicht mit einem älteren Daemon erneut: Er versteht Cloudkonten nicht und kann das neue Feld verwerfen, sodass eine erneute Cloudanmeldung erforderlich wird.
Umfang der Validierung
Tests prüfen beide Anbieteraustauschvorgänge anhand lokaler HTTP-Testdaten, echte Loopback-Callbacks, verschlüsselte dauerhafte Speicherung, Bindung an den Aufrufer, Wiederholung, Abbruch nach dem Sperren, fehlende Berechtigungsbereiche/ Aktualisierungstokens, Schwärzung von Fehlern, Ausschluss aus Sicherungen und Verweigerung des MCP-Zugriffs. Der Testtransport ist ausschließlich innerhalb des Moduls verfügbar; Produktionsendpunkte sind feste HTTPS-Endpunkte.
Die Autorisierung mit echten Konten erfordert registrierte Client-IDs/ Konfigurationen und die Zustimmung des Nutzers. Ohne diesen Test wird kein echtes Anbieterkonto als verifiziert bezeichnet. Mobile Geräte verwenden den unten beschriebenen nativen Autorisierungsablauf; die tatsächliche Zustimmung bleibt unverifiziert.
Am 2026-09-09 geprüfte Referenzen:
- Microsoft-Autorisierungscodeablauf
- OneDrive-Anwendungsordner
- Google OAuth für installierte Apps
- Google Drive-Anwendungsdaten
Mobiler Client
Die Cloudschaltfläche öffnet den Verbindungsstatus sowie „Verbinden/Erneut verbinden“, „Jetzt synchronisieren“ und „Trennen“. Die Synchronisierung läuft ausschließlich im Vordergrund. AppAuth öffnet den Systembrowser, validiert den Zustand und generiert PKCE. Wenn die App wegen des Browsers in den Hintergrund wechselt, wird die Bibliothek gesperrt. Entsperren und autorisieren Sie sich nach der Rückkehr erneut lokal, bevor Rust den Code austauscht. Zugriffs- und Aktualisierungstokens werden von Rust geprüft/gespeichert und niemals an Dart zurückgegeben.
Erstellen Sie den Build mit Ihrer plattformspezifischen Registrierung eines öffentlichen Clients:
--dart-define=MEMORIES_ONEDRIVE_CLIENT_ID=...--dart-define=MEMORIES_ONEDRIVE_REDIRECT_URI=app.memories.memories:/oauth/callback--dart-define=MEMORIES_GOOGLE_CLIENT_ID=...--dart-define=MEMORIES_GOOGLE_REDIRECT_URI=...
Nicht gesetzte Client-IDs deaktivieren die Anmeldung mit einer erklärenden Meldung. Betten Sie kein Webclient-Geheimnis ein und verwenden Sie die Loopback-Konfiguration des Desktopclients nicht erneut. Verwenden Sie die genaue native Umleitung, die der Anbieter für Ihre Plattform, Ihr Bundle/Paket und Ihre Signierungsidentität unterstützt. Google iOS-Registrierungen verwenden häufig das umgekehrte Client-ID-Schema; bei Google Android unterscheiden sich Registrierung und Umleitungsbeschränkungen und müssen vor der Verteilung eines Android-Builds anhand des vom Anbieter unterstützten nativen Ablaufs überprüft werden. Eine konfigurierte URI allein beweist nicht, dass die Zustimmung beim Anbieter unterstützt wird.
Das standardmäßig registrierte App-Schema ist app.memories.memories. Für ein
anderes benutzerdefiniertes Schema akzeptiert Android die Gradle-Eigenschaft
memoriesOAuthScheme (zum Beispiel über ORG_GRADLE_PROJECT_memoriesOAuthScheme);
iOS verwendet MEMORIES_OAUTH_SCHEME in mobile/ios/Flutter/Memories.xcconfig.
Das Schema muss mit der nativen Callbackregistrierung und der Dart-Umleitungs-URI
übereinstimmen. Wenn Sie beide Anbieter aktivieren, registrieren Sie kompatible
Callbacks oder fügen Sie das zweite Schema zum nativen Manifest/den URL-Typen hinzu.
HTTPS-App-/Universal-Links benötigen die Zuordnungsdateien ihrer Plattform und
eine native Konfiguration; der Standardbuild mit benutzerdefiniertem Schema aktiviert sie nicht.
Eine abgeschlossene Browseranmeldung kann eine alte Sitzung mit erhöhten Berechtigungen nicht wiederherstellen. Das Abbrechen der lokalen Passwortabfrage lässt die Cloudautorisierung unverändert. Sperren/Wechseln in den Hintergrund verhindert das Anwenden verspäteter Synchronisierungsergebnisse. Netzwerkfehler belassen Daten in der Warteschlange für ein späteres „Jetzt synchronisieren“; die Oberfläche unterscheidet einen abgeschlossenen Vorgang von einem begrenzten Durchlauf mit ausstehender Arbeit. Die Abmeldung entfernt lokale Tokens, nicht die Zustimmung beim Anbieter oder Clouddateien. Siehe Freigabekriterien für die Validierung mit echten Anbietern.