Tag Archives: twitter

OAuth2 – промінчик світла в темному царстві?

OAuth2 logo

З давніх давен мене завжди харила необхідність реєстрації на сайтах. Чесно. Причому не з якихось там параноїдальних міркувань (мене це дуже мало бентежить), а банально: знову вводити ім’я користувача, придумувати пароль, тощо… І тому коли треба реєструватись на комусь сайті доводиться через стандартну логін/пароль/e-mail процедуру це мене запросто може відлякнути від реєстрації взагалі. Потім з’явилися всякі OpenID, Facebook Connect, OAuth і життя стало налагоджуватись – реєстрації на одному з популярних сервісів типу Google/Facebook/Twitter зазвичай вистачає аби мати можливість логінитись на нормальні сайти в один клік: наприклад той самий Покупон ніколи б не отримав моїх грошиків ні за які знижки аби у нього не було реєстрації через Facebook та оплати по Webmoney, коли можна було придбати купончика фактично не торкаючись клавіатури, а просто в кілька тицків мишкою. І впевнений, що я такий не один. Тому останнім часом завжди коли доводиться писати сайт з реєстрацією мну намагається всунути туди реєстрацію через “3rd party” сервіси. Але ще рік тому це була нефігова проблема, бо усі ці сервіси використовували різні протоколи і незважаючи на те, що всі вони намагались зробити якнайкраще – виходило як завжди, бо об’єднати все це в якусь уніфіковану систему не так вже й тривіально. Чи не найбільше мене напрягав OAuth, бо при першому знайомстві з його процесом обмінами токенів наскоком без півлітри не розібратися. Причому мало того, кожен сервіс часто використовував свою варіацію протоколу, що знову ж таки ускладнювало написання гнучкого коду.

Коли довелося причіплювати мультиавторизацію останній раз, я вже поступово готувався засісти в ці окопи надовго. Хоча в цьому випадку було простіше – у Django принаймні добрі люди написали django-publicauth. Документація там бідненька, тому як правильно його заюзати довелося гуглити по коду інших open-source проектів, які його використовували. Facebook тим не менш завівся досить живенько, а от на ВКонтакті вже мило чекали перші граблі: модуль більше року не оновлювався і там API для авторизації встиг змінитися. Доктор сказав “Різати!” Як виявилося, російський недофейсбук встиг перейти на OAuth2 і (о, диво!) там все було просто як гранчастий стакан (щоб отримати токен для подальших запитів треба зробити лише один редірект та один фоновий запит з мінімумом параметрів). Причому там все було настільки просто і так чудово лягло на архітектуру бекендів django-publicauth, що все пофіксилось буквально за пару годин (включно з вдуплянням в те як все парцює, першим прототипом та подальшим рефакторингом). Мало того, при пошуку інформації про новий протокол виявилося, що Google та Facebook вже теж його підтримують. Коротше кажучи, наступного вечора я переписав і ці дві системи під OAuth2 і все працювало як швейцарський годинник. На все про все менше 8 годин часу і майже готовий патч. Кароче, вирішив я форкнутиdjango-publicauth на bitbucket та влити туди свої правки 😎 Єдина поки що паршива вівця – це Twitter, який поки не підтримує другу версію, але благо перша там працює нормально.

OAuth2 server-side app flow
OAuth2 flow for server-side applications

Ложка дьогтю: не дивлячись на простоту реалізації стандарт OAuth2 ще не затверджено остаточною. Існує кілька його драфтів і всі використовують свої власні інтерпретації. Але за рахунок його простоти складність правок під конкретну реалізацію зазвичай є справою перевизначення пари методів. Причому насправді відмінності дуже тупі. Вконтакт повертає JSON-відповідь із “зайвим” рівнем вкладеності, Гугл вимагає авторизувати токен через POST-запит, а Фейсбук повертає результат не в JSON, а в urlencoded query string 😕

Стандартизація рулить 😎

OAuth2 – промінчик світла в темному царстві?

OAuth2 logo

З давніх давен мене завжди харила необхідність реєстрації на сайтах. Чесно. Причому не з якихось там параноїдальних міркувань (мене це дуже мало бентежить), а банально: знову вводити ім’я користувача, придумувати пароль, тощо… І тому коли треба реєструватись на комусь сайті доводиться через стандартну логін/пароль/e-mail процедуру це мене запросто може відлякнути від реєстрації взагалі. Потім з’явилися всякі OpenID, Facebook Connect, OAuth і життя стало налагоджуватись – реєстрації на одному з популярних сервісів типу Google/Facebook/Twitter зазвичай вистачає аби мати можливість логінитись на нормальні сайти в один клік: наприклад той самий Покупон ніколи б не отримав моїх грошиків ні за які знижки аби у нього не було реєстрації через Facebook та оплати по Webmoney, коли можна було придбати купончика фактично не торкаючись клавіатури, а просто в кілька тицків мишкою. І впевнений, що я такий не один. Тому останнім часом завжди коли доводиться писати сайт з реєстрацією мну намагається всунути туди реєстрацію через “3rd party” сервіси. Але ще рік тому це була нефігова проблема, бо усі ці сервіси використовували різні протоколи і незважаючи на те, що всі вони намагались зробити якнайкраще – виходило як завжди, бо об’єднати все це в якусь уніфіковану систему не так вже й тривіально. Чи не найбільше мене напрягав OAuth, бо при першому знайомстві з його процесом обмінами токенів наскоком без півлітри не розібратися. Причому мало того, кожен сервіс часто використовував свою варіацію протоколу, що знову ж таки ускладнювало написання гнучкого коду.

Коли довелося причіплювати мультиавторизацію останній раз, я вже поступово готувався засісти в ці окопи надовго. Хоча в цьому випадку було простіше – у Django принаймні добрі люди написали django-publicauth. Документація там бідненька, тому як правильно його заюзати довелося гуглити по коду інших open-source проектів, які його використовували. Facebook тим не менш завівся досить живенько, а от на ВКонтакті вже мило чекали перші граблі: модуль більше року не оновлювався і там API для авторизації встиг змінитися. Доктор сказав “Різати!” Як виявилося, російський недофейсбук встиг перейти на OAuth2 і (о, диво!) там все було просто як гранчастий стакан (щоб отримати токен для подальших запитів треба зробити лише один редірект та один фоновий запит з мінімумом параметрів). Причому там все було настільки просто і так чудово лягло на архітектуру бекендів django-publicauth, що все пофіксилось буквально за пару годин (включно з вдуплянням в те як все парцює, першим прототипом та подальшим рефакторингом). Мало того, при пошуку інформації про новий протокол виявилося, що Google та Facebook вже теж його підтримують. Коротше кажучи, наступного вечора я переписав і ці дві системи під OAuth2 і все працювало як швейцарський годинник. На все про все менше 8 годин часу і майже готовий патч. Кароче, вирішив я форкнути django-publicauth на bitbucket та влити туди свої правки :cool: Єдина поки що паршива вівця – це Twitter, який поки не підтримує другу версію, але благо перша там працює нормально.

OAuth2 server-side app flow

OAuth2 flow for server-side applications

Ложка дьогтю: не дивлячись на простоту реалізації стандарт OAuth2 ще не затверджено остаточною. Існує кілька його драфтів і всі використовують свої власні інтерпретації. Але за рахунок його простоти складність правок під конкретну реалізацію зазвичай є справою перевизначення пари методів. Причому насправді відмінності дуже тупі. Вконтакт повертає JSON-відповідь із “зайвим” рівнем вкладеності, Гугл вимагає авторизувати токен через POST-запит, а Фейсбук повертає результат не в JSON, а в urlencoded query string :???:

Стандартизація рулить :cool:

Інтернет початку XXI сторіччя. Lifestreaming або соціальні агрегатори

Те, про що піде мова сьогодні, являється однією з найсмачніших інтернет-новинок, які принісли останні роки. Хоча, звісно, ці сервіси не з’явилися б не будь всих попередніх, які я вже згадував в рамках цього циклу статей: мікро- та звичайних блогів, соціальних мереж, соціальних новин, контент-хостерів, тощо. Зате вони ставлять зручність користування цим всим на інший рівень і відкривають деякі нові можливості. Ідея соціальних агрегаторів проста: вони збирають інформацію про вашу активність в мережі та подають її одним змішаним потоком. З’явилася вона порівняно недавно, коли у вжиток увійшло поняття “мережевої втоми” (“network fatigue”), одним з елементів якої вважається необхідність реєструватись на та відвідувати купу сайтів для того, щоб відстежувати, що роблять або чим цікавляться ваші “друзі” (в лапках, бо мається на увазі в мережевому сенсі) на різних сайтах та мережах. Тобто поясню на прикладі: ваш друг публікує фотки за допомогою Google Picasa, розшарює новини через Google Reader, пише щось в персональний блог, користується мікроблоггінгом і т.д., і т.п. Для того, щоб бути в курсі останніх змін вам треба або періодично заходити на всі ці сайти аби перевірити чи не з’явилось що новеньке (те ще збочення, погодьтесь), або підписатись на відповідну RSS (благо, всі сучасні сайти дозволяють це зробити). Фактично більшість соціальних агрегаторів типу Plaxo Pulse, Iminta та інших лише це і роблять — просто збирають інформацію докупи. Хоч і не завжди все через RSS — часто через API відповідних сервісів, які надають більше можливостей, завдяки чому ці сервіси все ж більш гнучкі й потужні, аніж просто купа RSS. Та все одно це занадто примітивно і… несоціально ) Якось по-дурному виходить: служба агрегації соціальних сайтів сама не є такою. Тому я цього разу відійду від попередньої практики опису декількох конкуруючих ресурсів і зупинюсь на тому, який вважаю безсумнівним лідером в цій сфері, який залишив інших далеко позаду. Мова піде про FriendFeed — стартап, який був розроблений не ким-небудь, а колишніми співробітниками компанії Google, що займали там далеко не останні позиції.

Отож, як писалось вище, основна робота ФрендФіду збирати докупи вашу активність в Мережі. Там є певний набір сервісів, що підтримуються на рівні API, а все інше можна при бажанні додати як підписку типу “Блог” (насправді це не обов’язкоко має бути блог – це скоріше звичайний RSS-агрегатор), вказавши відповідну RSS-стрічку. Таким чином ви реєструєте свою активність з різних сайтів у ФФ, а інші користувачі, кому цікава ваша персона, в свою чергу можуть підписатися на стрічку з нею. Величезна кількість підтримуваних сервісів (див. скріншот) вже зараз вирізняє його з-поміж конкурентів, але не лише цим він цікавий.

По-перше, там є можливість коментувати цю активність (буває такі розгортаються суперечки, що блоги відпочивають ) ) та додавати в “Улюблене”. І коментарі там — це не просто данина моді, а дуже зручна річ, коли вам хочеться прокоментувати активність на якомусь сервісі, де ви не зареєстровані. Для мейнстрімових речей є можливість “зворотного зв’язку”. Наприклад, коментарі до дописів в Twitter’і можна відправляти теж як твіти-відповіді (звісно, для цього вже треба бути зареєстрованим на відповідному сайті, але принаймні заходити на нього не треба та й виглядає обговорення зручніше). Щодо додавання у Favorites, то тут теж прикольно зроблено: з транзитивністю операції. Тобто, наприклад, користувач A читає користувача B, а B в свою чергу — C, але A нічого не знає про C, та коли користувач B додає в “Улюблене” щось зі стрічки C, то це попадає і в загальний потік користувача A, що останньому дуже і дуже зручно, бо в “Улюблене” зазвичай додають дійсно цікаві і варті уваги речі.

По-друге, можна відслідковувати активність людей не зареєстрованих на FriendFeed’і. Для цього є механізм “уявних друзів” (imaginary friend), коли ви додаєте чиюсь активність до ФФ по аналогії зі своєю власною, але використовуючи його логін чи то ідентифікатор при додаванні контенту, але ця активність не відмічається як “ваша”.

По-третє, зручний пошук. Здавалося б така дрібниця, але деякі агрегатори і цього не мають. До речі, я часто використовую FF для пошуку по прошарених дописах в Google Reader, бо він зберігає shared та starred записи лише впродовж одного місяця.

По-четверте, є тут така штука як “кімнати” (це одне останніх же нововведень), тобто своєрідні тематичні стрічки, в певному сенсі аналоги спільнот.

По-п’яте, в стрічка вашої активності може наповнюватись не лише автоматично із соціальних мереж, або RSS. Можна і просто залишити повідомлення, посилання на зовнішній ресурс чи картинки вручну — потрібно лише перетягти на панель відповідну “кнопку”.

Ну і ще багато всього. Його розробники подумали про багато приємних дрібниць. Припустимо, якщо ви довго не мали доступу до Інтернету, а “друзів” у вас багато, то у FF є спеціальний режим перегляду “найцікавіше за день/тиждень/місяць”, коли не потрібно буде перечитувати по декілька сторінок інформації, далеко не вся з якої може бути вам цікава, а так можна вже одразу відфільтрувати. Звісно, як і у кожного поважного стартапу у нього є API, завдяки чому було розроблено масу додатків. В тому числі з того чим я активно користуюсь: AIR-клієнт Alert Thingy (з підтримкою публікації не лише у FriendFeed, а також в Twitter та Flickr) та плагін-віджет для WordPress.

Мну особисто завдячує ФрендФіду як одному з джерел цікавої інформації за рахунок його системи обміну цікавинками, а з іншого – економією часу на відвідуванні інших сайтів (фактично останнім часом ранковий перегляд новин звівся до перегляду FF-стрічки, пари форумів та інколи Google Reader; останній рідко, бо досить багато часу витрачається). До речі, цікаво що активно викорситовувати я його став лише через кілька місяців після реєстрації. Тоді навіть знаючи про нього багато з того, що написано вище я не розумів навіщо його потрібно. А зараз це один з основних сайтів на які я заходжу. Отаке.

Спільнота

 Geek and Poke - Community (Спільнота)

Подивтись оригінал. © Geek and Poke.