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:
- Browser DevTools Analyse 🕵️♂️: Beim Öffnen eines OneDrive-Links werden die Netzwerk-Requests sichtbar 🌐
- JavaScript-Code-Analyse 📜: Microsoft's eigener OneDrive-Client verwendet diese ID 💻
- 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:
- Legitime App-ID ✅: Dieselbe, die Microsoft's Website verwendet
- Offizieller Service 🏢:
badger.svc.msist Microsoft's eigener Authentifizierungsdienst - 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 👨💻
- 🛡️ Immer Fallbacks planen - APIs können jederzeit brechen
- 💎 Community ist Gold wert - Jemand hat das Problem schon gelöst
- 🕵️♂️ Reverse Engineering ist legitim - Manchmal die einzige Option
- 📊 Monitoring ist kritisch - Überwacht undokumentierte APIs
Für Microsoft 🏢
- 📢 Breaking Changes kommunizieren - Mindestens 6 Monate Vorlaufzeit
- 📖 Migration Guides bereitstellen - Zeigt den Upgrade-Pfad auf
- 🎯 Use Cases verstehen - Nicht jeder braucht komplexe OAuth-Flows
- 🤝 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 🎯
- 🔗 eugenenuke/onedrive-downloader - Das GitHub-Repo, das alles möglich machte
- �️♂️ Original fetch_onedrive_url.sh - Der Quellcode mit der App-ID
Microsoft Dokumentation 📋
- Microsoft Graph API: Offizielle API-Dokumentation - Die offizielle (aber unvollständige) Lösung 🔗
- 🔐 OneDrive Share URL Encoding: Share Links API - Einer der wenigen dokumentierten Teile 📖
- 🏢 Azure App Registrations: App-Registrierung Guide - Offizielle App-Registrierung ⚙️
Community-Projekte 🤝
- 🔧 abraunegg/onedrive: Linux OneDrive-Client - Linux OneDrive-Client mit ähnlichen Herausforderungen 🐧
- 💬 API Discussions: OneDrive API Discussions - Community-Diskussionen über API-Probleme 🗣️
- 📱 SDK Issues: OneDrive SDK Issues - Bekannte SDK-Limitationen ⚠️
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 📁