OneDrive Share-Links und die versteckte Badger-API: Eine langjährige Odyssee

Das Problem: Wenn Microsoft APIs einfach verschwinden 💥

Als Entwickler kennt man das: Man baut ein System, das jahrelang funktioniert, und plötzlich - ohne Vorwarnung - bricht alles zusammen 💔. Genau das ist mir mit meinem OneDrive-Bilddownload-Skript passiert.

Was funktionierte (bis es nicht mehr tat) ✅➡️❌

Mein Skript war simpel und elegant:

# Die "alte" OneDrive v1.0 API
curl -s "https://api.onedrive.com/v1.0/shares/${share_id}/root/children"

Drei Jahre lang lief das perfekt 🏃‍♂️. Bis Microsoft entschied, dass OneDrive-Share-Links plötzlich eine Authentifizierung benötigen 🔐.

Der Fehler, der alles veränderte 🚨

Error: Failed to fetch data from OneDrive.

Keine Warnung 📢, keine Migration-Guide 📖, keine Dokumentation 📋. Nur ein kaputter API-Call und Millionen von frustrierten Entwicklern weltweit 😤.

Die offizielle Lösung (die keine ist) 🤦‍♂️

Microsoft's offizielle Antwort? "Nutzen Sie Microsoft Graph mit OAuth!" 🙄

Das Problem: Für anonyme Share-Links funktioniert das nicht ohne:

  • 🏗️ Azure App-Registrierung
  • 🔄 OAuth-Flow implementieren
  • ✋ Benutzer-Consent einholen
  • 🧠 Komplexe Token-Verwaltung

Für ein simples "Lade Bilder aus einem öffentlichen Share herunter" völlig übertrieben 🎭.

Die Suche nach Alternativen 🔍

Versuch 1: Web-Scraping 🕷️

# Fragil und unreliabel
curl -s "$share_url" | grep -oP 'downloadUrl":"[^"]+' 

Versuch 2: Browser-Automation 🤖

# Funktioniert, aber langsam und resource-intensiv
selenium-webdriver --headless

Versuch 3: Aufgeben 🏳️

# Die häufigste "Lösung"
# Wechsel zu anderen Cloud-Providern

Der Durchbruch: Reverse Engineering rettet den Tag 🦸‍♂️

Nach drei Jahren Frust stieß ich auf ein GitHub-Repository: eugenenuke/onedrive-downloader 💎

Der Autor hatte Microsoft's eigene OneDrive-Website reverse-engineered und dabei eine versteckte API entdeckt 🕵️‍♂️.

Die "Badger"-API 🦡

Microsoft nutzt intern einen Service namens "Badger" für die Authentifizierung:

# 1. Token von Microsoft's internem Service holen 🎟️
curl -s -H "Content-Type: application/json" \
  -d '{"appId":"5cbed6ac-a083-4e14-b191-b4ba07653de2"}' \
  https://api-badgerp.svc.ms/v1.0/token

# 2. Token für API-Calls verwenden 🔑
curl -s -H "Authorization: Badger $token" \
  "https://my.microsoftpersonalcontent.com/_api/v2.0/..."

Die magische App-ID ✨

5cbed6ac-a083-4e14-b191-b4ba07653de2 - Das ist Microsoft's eigene App-ID für das OneDrive-Web-Interface 🏢. Dieselbe ID, die verwendet wird, wenn Sie einen OneDrive-Link im Browser öffnen 🌐.

Woher stammt diese App-ID? 🔍

Diese App-ID wurde durch Reverse Engineering der OneDrive-Website entdeckt:

  1. Browser DevTools Analyse 🕵️‍♂️: Beim Öffnen eines OneDrive-Links werden die Netzwerk-Requests sichtbar 🌐
  2. JavaScript-Code-Analyse 📜: Microsoft's eigener OneDrive-Client verwendet diese ID 💻
  3. Community-Forschung 🤝: Mehrere Open-Source-Projekte haben diese ID unabhängig gefunden 🔬

Bekannte Verwendung in anderen Projekten 📚

  • 🔗 eugenenuke/onedrive-downloader - Das Original-Repository, das diese Entdeckung machte 💎
  • 🐧 abraunegg/onedrive - Discussions über alternative OneDrive-APIs
  • 💬 Stack Overflow Threads - Verschiedene Diskussionen über OneDrive API-Probleme 🤔
  • 🤖 Reddit r/sysadmin - Community-Diskussionen über OneDrive-Automatisierung ⚙️

Technische Verifikation 🔬

Die App-ID ist legitim und offiziell, weil:

  • ✅ Sie ist im Microsoft App Registration Portal registriert (intern)
  • 🌐 Sie wird von office.com und onedrive.live.com verwendet
  • 🔑 Sie hat spezielle Berechtigungen für Share-Link-Zugriffe
  • ☁️ Sie ist in Microsoft's Azure AD B2C für anonyme Zugriffe konfiguriert

Die technischen Details ⚙️

Wie der Badger-Token funktioniert 🎭

Der JWT-Token enthält interessante Claims:

{
  "aud": "https://onedrive.com/",
  "iss": "https://badger.svc.ms/v1.0/auth",
  "appid": "5cbed6ac-a083-4e14-b191-b4ba07653de2",
  "given_name": "38",        // Zufälliger Name 🎲
  "family_name": "Snake",    // Zufälliger Name 🐍  
  "exp": 1761251614          // 7 Tage Gültigkeit ⏰
}

Der vollständige Workflow 🔄

# 1. Badger Token abrufen 🎫
get_badger_token() {
    local response
    response=$(curl -s -H "Content-Type: application/json" \
        -d '{"appId":"5cbed6ac-a083-4e14-b191-b4ba07653de2"}' \
        https://api-badgerp.svc.ms/v1.0/token)
    
    echo "$response" | grep -oP '"token":"\K[^"]+'
}

# 2. Share-URL encodieren 🔐
encode_share_url() {
    echo -n "$1" | base64 -w 0 | tr -d '=' | tr '/' '_' | tr '+' '-'
}

# 3. API-Calls mit Token 📡
fetch_share_data() {
    local token=$(get_badger_token)
    local encoded_url=$(encode_share_url "$SHARE_URL")
    
    curl -s -H "Authorization: Badger $token" \
        "https://my.microsoftpersonalcontent.com/_api/v2.0/shares/u!${encoded_url}/driveitem"
}

Warum funktioniert das? 🤔

Microsoft's eigene Infrastruktur 🏗️

Die Badger-API ist nicht gehackt - es ist Microsoft's eigene, interne Infrastruktur:

  1. Legitime App-ID ✅: Dieselbe, die Microsoft's Website verwendet
  2. Offizieller Service 🏢: badger.svc.ms ist Microsoft's eigener Authentifizierungsdienst
  3. Produktive Nutzung 📊: Millionen von OneDrive-Zugriffen täglich nutzen diese API

Warum ist es undokumentiert? 🤷‍♂️

  • 🔒 Interne API: Nur für Microsoft's eigene Anwendungen gedacht
  • 🤸‍♂️ Flexibilität: Kann sich jederzeit ändern ohne externe Verpflichtungen
  • ⚖️ Liability: Microsoft will keine Verantwortung für externe Nutzung
  • 🚦 Rate Limiting: Vermeidung von Missbrauch

Die Ironie des Problems 😂

Als Microsoft-Mitarbeiter ist die Ironie besonders schmerzlich:

  • 🚫 Problem: API-Dokumentation fehlt
  • 💬 Ursache: Interne Kommunikation zwischen Teams
  • 🕵️‍♂️ Lösung: Reverse Engineering von Microsoft's eigenen Tools
  • 🌍 Realität: Community löst Microsoft's Dokumentationsprobleme

Was schief läuft 🎪

# OneDrive Team: "Wir brauchen Authentifizierung für Shares" 🔐
# Graph Team: "Nutzt Microsoft Graph!" 📈
# Reality Check: Graph funktioniert nicht für anonyme Shares ❌
# Developer: *reverse engineers Microsoft's website* 🕵️‍♂️
# Community: *teilt Lösung auf GitHub* 🤝

Risiken und Nachhaltigkeit ⚠️

Langzeitstabilität 📈

Warum die App-ID wahrscheinlich stabil bleibt 🔒:

  • 🔗 Fest verdrahtet in Microsoft's OneDrive-Website
  • 💥 Änderung würde Millionen von eingebetteten OneDrive-Links brechen
  • 🏗️ Massive Infrastruktur-Abhängigkeiten

Risiken ⚠️:

  • 📖 Undokumentiert = keine Garantien
  • 🔄 Kann jederzeit geändert werden
  • 📋 Keine Service Level Agreements

Monitoring-Strategie 📊

# Überwachung einbauen 👀
monitor_badger_api() {
    if ! get_badger_token >/dev/null 2>&1; then
        echo "🚨 ALERT: Badger API möglicherweise geändert!"
        # Fallback-Mechanismen aktivieren 🔄
    fi
}

Lessons Learned 🎓

Für Entwickler 👨‍💻

  1. 🛡️ Immer Fallbacks planen - APIs können jederzeit brechen
  2. 💎 Community ist Gold wert - Jemand hat das Problem schon gelöst
  3. 🕵️‍♂️ Reverse Engineering ist legitim - Manchmal die einzige Option
  4. 📊 Monitoring ist kritisch - Überwacht undokumentierte APIs

Für Microsoft 🏢

  1. 📢 Breaking Changes kommunizieren - Mindestens 6 Monate Vorlaufzeit
  2. 📖 Migration Guides bereitstellen - Zeigt den Upgrade-Pfad auf
  3. 🎯 Use Cases verstehen - Nicht jeder braucht komplexe OAuth-Flows
  4. 🤝 Community einbeziehen - Feedback vor Breaking Changes

Die Lösung heute 🎉

Mein OneDrive-Skript funktioniert wieder:

#!/bin/bash
# Moderne OneDrive Share-Download mit Badger-API 🦡
./onedrive.sh -p expose
# Downloaded 028198.jpg ✅
# Downloaded 028264.jpg ✅
# Downloaded 028269.jpg ✅
# ... 📥
# --- Done --- 🎊

Nach vielen Jahren Kampf - eine simple, funktionierende Lösung 🏆. Gefunden nicht in Microsoft's Dokumentation, sondern durch die brillante Reverse-Engineering-Arbeit der Open-Source-Community 🌟.

Fazit 🏁

Die OneDrive-Badger-API zeigt sowohl das Beste als auch das Schlechteste der modernen Softwareentwicklung:

Das Schlechte 👎:

  • 💥 Undokumentierte Breaking Changes
  • 🚫 Fehlende offizielle Lösungen für einfache Use Cases
  • 😤 Jahre der Entwickler-Frustration

Das Gute 👍:

  • 🌟 Brillante Community-Lösungen
  • ⚙️ Funktionale, wenn auch undokumentierte APIs
  • 💡 Beweis, dass Reverse Engineering Innovation treiben kann

Manchmal muss man Microsoft's eigene Tools reverse engineeren, um Microsoft's APIs zu nutzen 🤯.

Willkommen in der modernen Softwareentwicklung! 🤷‍♂️


💌 Falls Sie als Microsoft-Mitarbeiter lesen - bitte dokumentiert die Share-API offiziell. Die Community wird es Ihnen danken!

Ressourcen 📚

Primäre Quellen 🎯

Microsoft Dokumentation 📋

Community-Projekte 🤝

Weitere technische Referenzen 🔬

  • 🌐 Browser DevTools: F12 → Network Tab beim Öffnen von OneDrive-Links 🕵️‍♂️
  • 📜 JavaScript-Konsole: console.log(window.OnedriveConfig) auf onedrive.live.com 💻
  • 🔍 Badger Service: https://badger.svc.ms/v1.0/ - Microsoft's interner Auth-Service 🦡
  • 🎭 JWT Decoder: jwt.io zum Analysieren der Badger-Tokens 🔓

App-ID Verifikation 🔐

Die App-ID 5cbed6ac-a083-4e14-b191-b4ba07653de2 kann in folgenden Kontexten gefunden werden:

  • 🌐 OneDrive Web-Interface: Browser-Netzwerk-Requests 📡
  • 🏢 Office.com: Share-Link-Authentifizierung 🔑
  • 👥 Microsoft Teams: OneDrive-Integration 🤝
  • 📊 SharePoint Online: Anonyme Datei-Zugriffe 📁