Dajbych.net


Veřejné složky náhle přestaly být součástí osobního OneDrivu

, 3 minuty čtení

onedrive logo

K obsahu uloženému ve službě hostování souborů OneDrive lze přistupovat prostřednictvím webového prohlížeče, aplikace nebo rozhraní HTTP API. Přístup k souborům ve složkách veřejně sdílených s kýmkoli nebyl omezen pouze na ověřené požadavky. Se zastaralostí veřejných složek zmizí i možnost snadného přístupu ke složkám OneDrive. Našel jsem trik, jak zachovat aktuální kód s minimálními změnami a zároveň zůstat aktuální s postupy vyžadovanými nejnovější verzí služby.

Windows Live Folders byl zaveden přibližně ve stejné době jako Dropbox. Služba byla přejmenována na Windows Live SkyDrive, poté zjednodušena na SkyDrive a později přejmenována na OneDrive. Převzal funkčnost Windows Live Mesh, který je nyní vyřazen. V jeho názvu je také další služba, která používá OneDrive: OneDrive for Business, dříve SkyDrive Pro. Stejnou vývojářskou platformu sdílí i SharePoint Online. Obsah tohoto článku se netýká OneDrivu pro firmy ani SharePointu Online.

V minulosti jsem pro přístup ke svým souborům uloženým na OneDrive používal ověřování OAuth. Problém spočíval v tom, že aplikace musela požádat uživatele, aby zpracoval tok ověřování, uložil tokeny a pravidelně aktualizoval přístupový token. Tato úroveň zabezpečení nebyla nutná, protože aplikace přistupovala k datům publikovaným na webu. Poté se OneDrive REST API stal součástí API Microsoft Graph. V té době umožňovala přístup k veřejným souborům z OneDrivu bez přístupového tokenu získaného z toku ověřování.

API pro přístup k veřejným položkám bylo následující:

https://api.onedrive.com/v1.0/drive/items/{item-id}/children

Kde item-id vypadá takto:

AB8DAAB49807BE4!140

Je viditelná v adrese URL prohlížeče v parametru id, ale ve formě kódované v URL (! se změní na %21):

https://onedrive.live.com/?id=AB8DAAB49807BE4%21140&cid=0AB8DAAB49807BE4

Rozhraní API vrací obsah složky serializovaný ve formátu JSON.

V současné době je společnost Microsoft v procesu odstraňování funkce veřejného sdílení. Údajně to byl zdroj zmatku pro koncové uživatele, kteří nechápou rozdíl mezi publikováním něčeho jako veřejného a sdílením odkazu na zobrazení souboru. Jedná se o logický důsledek odebrání všech varovných oken se zprávami z uživatelského rozhraní ve všech produktech společnosti Microsoft. Data, která se zobrazila nějaká informační zpráva, nebyla vázána na účet Microsoft, protože propojení (lokálního) účtu Windows s účtem Microsoft bylo zavedeno mnohem později. Po přeinstalaci systému Windows jste museli znovu zavřít všechny varovné zprávy. Bylo to považováno za otravné, a proto byly odstraněny informační zprávy a odstraněny i funkce, které vyžadovaly bezpečnostní pokyny před prvním použitím.

Každopádně v dokumentaci se můžeme dočíst, že stále existuje možnost přístupu ke sdíleným souborům pomocí hypertextového odkazu:

https://api.onedrive.com/v1.0/shares/{sharingTokenOrUrl}

Problém je v tom, kde můžete sdílet token nebo adresu URL jinak než z rozhraní Microsoft Graph API. Web vygeneruje odkaz pro sdílení takto:

https://1drv.ms/f/s!AovxGDBRozRrjQa0_G1V50XOaZku

Musíte použít nástroje pro vývojáře F12 , abyste zachytili, že odkaz několikrát přesměrovává. První přesměrování je na něco podobného:

https://onedrive.live.com/redir?resid=6B34A3513018F18B!1670&authkey=!ALT8bVXnRc5pmS4&ithint=folder,

Následování přesměrování není v tuto chvíli důležité. Za zmínku ale stojí, že zatímco OneDrive vyžaduje, aby se uživatelé po kliknutí na odkaz pro sdílení přihlásili pomocí účtu Microsoft, OneDrive API nabízí obsah prostřednictvím protokolu OData bez jakékoli autentizace. Úlohou 1drv.ms je zkracování odkazů. Důležitou částí je URL, které je rozšířeno z krátkého formuláře. Jedná se o adresu URL pro sdílení, která je dokumentem.

https://api.onedrive.com/v1.0/shares/u!{sharingUrlBase64Encoded}/root?expand=children

Někteří uživatelé byli postiženi ještě předtím, než byl tento mechanismus zdokumentován. Nebylo oznámeno, že by tato změna mohla ovlivnit mnoho programů pracujících se službou OneDrive. Strávil jsem několik hodin zkoumáním, co se děje, dokud jsem nenašel nějaké zdůvodnění od produktového týmu.