Ñåãîäíÿ ðàññêàæó êàê ðåàëèçîâûâàåòñÿ ðàáîòà ïðèëîæåíèÿ ÷åðåç OAuth, åñëè ïîëüçîâàòåëü ïåðåäàåò ïðîñòî ëîãèí è ïàðîëü.
Ïðåæäå âñåãî ïîòðåáóåòñÿ êëàññ OAuthUtility,
êîä êîòîðîãî åñòü â blogsapi.
Íà ïåðâîì ýòàïå ìû ïðîâåðÿåì ïðîèçâîäèëè ëè ìû àóòåíòèôèêàöèþ ïîëüçîâàòåëÿ ðàíåå. Åñëè íåò, òî îáðàùàåìñÿ ê òâèòòåðó ñ ëîãèíîì è ïàðîëåì, ñîîòâåòñòâóþùåìó íàøåìó ïðèëîæåíèþ (tokens.ConsumerKey,tokens.ConsumerSecret). Ïîëó÷àåì íàçàä êëþ÷(response.Token), ïî êîòîðîìó ìû ìîæåì ïîñòðîèòü çàïðîñ (OAuthUtility.BuildAuthorizationUri(response.Token)) íà ïîëó÷åíèå óíèêàëüíûõ ëîãèíà è ïàðîëÿ äëÿ ïîëüçîâàòåëÿ íàøåãî ïðèëîæåíèÿ. Íàçàä âîçâðàùàåòñÿ ñòðàíèöà, íà êîòîðîé ïîëüçîâàòåëþ ïðåäëàãàåòñÿ ââåñòè ëîãèí è ïàðîëü, íî òàê êàê ìû íå õîòèì òðåâîæèòü ïîëüçîâàòåëÿ, òî ââîäèì èõ çà íåãî, íåçàáûâàÿ èçâëå÷ü ñî ñòðàíèöû authenticity_token. Åñëè ëîãèí è ïàðîëü ïðàâèëüíû, òî íàì âîçâðàùàåòñÿ óíèêàëüíûé PIN, êîòîðûé ïîëüçîâàòåëü äîëæåí ïîòîì ïåðåäàòü íàøåìó ïðèëîæåíèþ, â êà÷åñòâå åäèíîðàçîâîãî ïàðîëÿ äëÿ ïîëó÷åíèÿ ïîñòîÿííîãî ïàðîëÿ. Îïÿòü æå ïàðñèì ñòðàíèöó âðó÷íóþ, ÷òîáû íå òðåâîæèòü ïîëüçîâàòåëÿ. È â çàâåðøåíèå äåëàåì çàïðîñ OAuthUtility.GetAccessToken, ÷òîáû ïî ðàçîâîìó ïàðîëþ íàøå ïðèëîæåíèå ïîëó÷èëî ïîñòîÿííûé ïàðîëü. È ñîõðàíÿåì ðåçóëüòàò, ÷òîáû áîëüøå íå ïîâòîðÿòü ýòèõ äåéñòâèé.
 èòîãå íàøå ïðèëîæåíèå, ÷òîáû ñäåëàòü çàïðîñ îò ëèöà ïîëüçîâàòåëÿ ïåðåäàåò íå ëîãèí è ïàðîëü, à àæ 4 ñòðî÷êè, ñîîòâåòñòâóþùèå 2ì ëîãèíàì è ïàðîëÿì îò íèõ.
Îñíîâíàÿ âûãîäà - áåçîïàñòíîñòü, è òî, ÷òî ýòè ñòðî÷êè íàìíîãî ñëîæíåå ÷åì ïåðâîíà÷àëüíûå ëîãèí è ïàðîëü ïîëüçîâàòåëÿ, ÷òî ãàðàíòèðóåò ñëîæíîñòü èõ ïîäáîðà. Íî ñ äðóãîé ñòîðîíû, îíè íå èìåþò ñðîêà äàâíîñòè, ïîýòîìó çíàÿ èõ ñ ëåãêîñòüþ ìîæíî âûïîëíèòü äåéñòâèÿ îò ëèöà ïîëüçîâàòåëÿ-ïðèëîæåíèÿ, â îòëè÷èè îò êóêîâ èëè ñåññèé äëÿ àâòîðèçîâàííûõ êëèåíòîâ ñàéòîâ.
È îáùàÿ ñõåìà, äåìîíñòðèðóþùàÿ âåñü óæàñ òîãî, âî ÷òî ïðåâðàùàåòñÿ ïðîñòàÿ ðàíåå îïåðàöèÿ ïî âûïîëíåíèþ äåéñòâèé ïðè ïîìîùè ëîãèíà è ïàðîëÿ:
Êîä ñàìîé ôóíêöèè "çàëîãèíèâàíèÿ" â òâèòòåð.
×èòàòü äàëåå...