V dnešní době je internet plný webů (a nejen od Microsoftu), které používají autentizaci pomoci Windows Live ID. Teoreticky by se mohlo tedy zdát, že vytvořit ASP.NET aplikaci, která by právě využívala autentizaci přes Windows Live ID, by nemělo být až tak obtížné. Bohužel tomu tak ale není. Dle mých dosavadních zkušeností nejen že to není jednoduché, ale navíc existuje jen velmi málo příkladů, které jsou zpravidla neúplné, a to samé se dá říci i o dokumentaci.
Ještě si nejprve upřesněme, co je pro takovou aplikaci typické. Jedná se nám o ASP.NET aplikaci, na kterou v nejjednodušším scénáři budou uživatele přistupovat pouze pomoci Live ID a která bude umožnovat pořídit a pak zpětně poskytnout nějaká data specifická pro přihlášeného uživatele (jinými slovy, v databázi budou data této aplikace svázána s user ID z Windows Live). Aplikace by tedy ani nemusela mít vlastní registraci, ani nevyžadovala o uživateli vědět žádné další údaje, které nelze získat z Windows Live. Co bych si ale naopak od takové aplikace představoval je možnost zapamatování uživatele nebo automatické přihlášení (single sign-on).
Největším důvodem proč se nejedná o problém jednoduchý bude asi to, že aktuálně existují hned čtyři technologicky odlišné přístupy:
- Web Authentication, stará Live technologie (před změnou na Live Connect). Většina příkladů na autentizaci pomoci Live ID používá právě tento zastaralý způsob. Pozor, že naprosto všechny existující příklady (oficiální i ostatní) používající tento způsob jsou dnes již nefunkční a popisy na jejich rozchození i dokumentace obsahuje zastaralé a neplatné údaje. Po provedení několika nikde nedokumentovaných změn, lze z pravidla sice příklady rozběhnout, ale stejně jsou funkcionalita i možnosti tohoto způsobu dosti omezené. Oficiálně se jedná o “will be obsolete functionality” (dokumentace zde).
(Některé z příkladů používající tento způsob se dají poznat podle toho, že odkazují na tuto starou stránku.)
- Live Connect Java skript API, dokumentace zde a zde. Jedná se o up-to-date způsob, využívající Java-skriptovou knihovnu. Existuje jeden, opakuji jeden, oficiální příklad součástí SDK, který je dle mého názoru nefunkční nebo alespoň neúplný. Ani s pomocí dokumentace se mi ho totiž nepovedlo rozchodit. Jiné příklady neexistují.
Další nevýhoda tohoto způsobu je to, že stav (session s informacemi z Windows Live) je udržován přímo objektem inicializovaným v Java skriptu a tudíž server o tom, zda je nějaký uživatel přihlášen ani neví (pokud by se mu identita nějak zpětně z Java skriptu nepředala). Jak je fungování celého řešení myšleno se mi, opět díky absenci kompletního a funkčního příkladu, zjistit nepodařilo, navíc nejsem moc příznivcem takovýchto “Java-skript only” řešení.
- Live Connect REST API, popis zde. V ASP.NET téměř jediné snad i použitelné řešení. Nevýhodou je ale, že součástí SDK je jen kousíček řešení (v podstatě pouze naznak) a jinak si naprosto vše musí člověk naprogramovat sám (na rozdíl od Windows Phone 7 a Windows 8 Metro-style aplikace, pro které existuje v SDK podpora ve formě knihovny - Managed API).
Žádné jiné příklady jsem opět nenašel. Nicméně na implementaci příkladu používající tento způsob pracuji a časem se o něj podělím.
Update: Tento příklad včetně popisu je k dispozici zde.
- Kombinace ACS (Access Control Service) a WIF (Windows Identity Foundation), ACS je pomocná Microsoft služba běžící pouze v cloudu (nebo na lab prostředí portal.appfabriclabs.com, kde zatím?! funguje zdarma), která volání Live služeb zprostředkovává. Výhodou je, že ACS umí i jiné identity providery (konkrétně Windows Live ID, Facebook, Google a Yahoo!) a umožňuje uživateli vybrat, který použít. Výsledkem autentizace je pak kolekce claimů naplněná “přepracovanými” daty od konkrétního identity providera. Nevýhoda je zpoplatnění ACS a nutnost Windows Azure učtu.
Některé příklady jsou dostupné například zde, zde a zde.
Máte někdo nějaké vlastní zkušenosti, vyzkoušený příklad nebo implementaci na přihlašování pomoci Windows Live ID? Podělte se o jakýkoliv podmět v diskuzi pod příspěvkem.