PushAll Auth — аутентифікація і зворотний зв'язок з користувачем


Для чого ми використовуємо електронну пошту? Найчастіше, ми використовуємо Email для реєстрації і входу на різних сайтах, а також щоб тримати зв'язок з цими сайтами, вони можуть надіслати вам інформацію про вашому акаунті, повідомлення та інше. Однак при такій реєстрації ви даруєте сайтів ваш постійний Email, на який вони зможуть писати, і відписка не завжди може допомогти. Ваш ящик може потрапити третім особам і потрапити списки розсилки спаму. Антиспам добре – але до розумної межі.

Ми вже давно позиціонуємо наш сервіс як заміну Email. І ось тепер ми підходимо до можливості здійснювати вхід на сторонніх сайтах використовуючи PushAll ID.
Раніше у нас вже була можливість вказати Callback URL для отримання ID, але зробити повторний вхід було неможливо.

З головних особливостей входу через PushAll можна виділити:

  1. Анонімність. Якщо ви заходите в PushAll через Google обліковий запис Google+ або через Email, то сторонній сайт дізнається тільки ваш ID.
  2. Контрольована зворотний зв'язок. Можна в будьякий час відписатися від каналу, він більше не зможе вас потривожити. Поки ви підписані – ви будете отримувати миттєві повідомлення.
Ми реалізували кнопку «Відкрити» після підписки та альтернативну OAuth-модель входу. Також в кінці статті розповімо про новий микросервисе, який ми зробили для Host-Tracker.com

Навіщо потрібна така аутентифікація?
Як мінімум це корисно для микросервисов. Раніше потрібно було робити на авторизацію через соціальні мережі, щоб якось визначати користувача для збереження налаштувань микросервиса. Тепер же виходить 2 в одному – микросервис може відправляти повідомлення, а PushAll реалізує визначення користувача для зберігання налаштувань або виконання якої-небудь іншої механіки.

Можна додати даний метод входу на сайт до інших соціальних мережах і відразу отримати доступ на відправку повідомлень на всі підключені користувачем пристрою. Як приклад, це може бути швидкий вхід для написання коментарів на сайті. Тут ви відразу даєте якусь ідентифікацію — що саме цей користувач пише коментар, а також можете повідомити про відповіді на цей коментар. В доповнення якщо це ваш блог ви можете надсилати повідомлення про нові статтях (тільки попередьте про це користувача в описі каналу). Ви зможете за рахунок цього значно збільшити свою аудиторію для push-повідомлень.

Ми дотримуємося загальної ідеї ізольованості, коли користувач може відразу відмовитися від використання вашого сайту. З одного боку це мінус – ви не зможете відправити користувачеві прощального листа, але з іншого боку користувачі будуть охочіше авторизуватися, адже вони в курсі, що ніякі особисті дані передані не будуть.

При авторизації через PushAll користувач вже буде чекати звичну для нього механіку: авторизувався, отримав доступ до сайту і можливостям доступним лише для зареєстрованих користувачів, закрив вкладку – точно впевнений що прийде повідомлення. Авторизація користувача через PushAll припускає, що ви будете слати повідомлення про події.

Я особисто, дуже часто зустрічав випадки, коли я чекав листа з сайту з повідомленнями, але насправді їх просто не було, тому що сайт їх не реалізував. Або ж випадки, коли приходить одне повідомлення в 10 хвилин – а все інше буде скорочено. При цьому часто всередині сайту реалізується якась стрічка сповіщень, щоб ці моменти обійти. При використанні авторизації з push-повідомленнями ми беремо всі ці функції на себе.

Як цим користуватися?
Вам потрібно вказати ваш Callback URL і вибрати потрібне вам використовувати підхід з отриманням ID використовуючи протокол схожий з OAuth.



Вся механіка роботи така:

  1. Ви розміщуєте посилання вашого каналу на вашому сайті, наприклад pushall.ru/adminvk або посилання з швидким входом – pushall.ru/sign.php?subid=1586
  2. Користувач переходить по ній та підписується на канал
  3. В новому вікні відкривається ваш сайт, на який передані дані для аутентифікації користувача
Якщо користувач ще не зареєстрований в PushAll – він може увійти через Google-аккаунт після чого також перейде на ваш сайт. Або ж зареєструватися поштою і зайти через пошту і також потрапить у підсумку на ваш сайт.

Він у будь-який момент може натиснути — Відкрити і буде зроблений перехід по аутентификационной посиланням.

Є 2 підходи перевірки користувача

Поточний підхід без додаткового запиту

Вам прийдуть GET-параметри:

pushalluserid=ID&time=UNIXTIME&sign=ПІДПИС
pushalluserid — ID користувача

Для перевірки підпису використовуйте md5(key.pushalluserid.time.ipAddress).

  • ipAddress: IP користувача
  • key — ключ вашого каналу.
  • time — час з початку епохи UNIX.
Ви можете самі визначати рівень довіри з time — чим більше часу пройшло, тим менше рівень довіри

З недоліків даного методу — нехай і малоймовірно, але даний запит можливо підробити. Він навіть може бути не згенерований у нас, а десь на стороні просто знаючи ваш ключ (якщо ви його десь вказали раптом)

Новий підхід схожий з OAuth

Ми постаралися передати «дух OAuth» залишивши велику частину назв полів і відповідь незмінним. Вам повернеться code, який треба буде надіслати через API щоб отримати ID користувача.
pushall.ru/api.php?type=oauth&code=CODE&client_id=ID_КАНАЛА&client_secret=КЛЮЧ_КАНАЛА
Ви також можете передавати звичні id key – скрипт розуміє і те й інше.

Вам повернеться JSON — {«access_token»:«1»}
Де 1 — ID користувача.

CODE живе всього 5 хвилин, його потрібно встигнути передати за цей час. Він одноразовий – тобто отримати за нього ще раз ID не вийде. По хорошому вам варто вказувати в Callback URL проміжну сторінку, яка буде обробляти CODE і автентифікувати користувача за прийнятим ID, і далі переходити вже на сам сайт.

Використовуючи посилання pushall.ru/sign.php?subid=ID_КАНАЛА можна аутентифікувати користувача в один клік, якщо він вже підписаний на ваш канал.

Про аутентифікацію і авторизацію
По суті через PushAll Auth ви можете аутентифікувати користувача, щоб точно визначити, хто це, але також використовуючи ID розпізнавальний, ви отримуєте можливість виконувати запити до API в системі PushAll тобто ви отримуєте авторизацію в PushAll з обмеженим набором можливостей – відправкою Push-повідомлень.

Як це виглядає
Великих прикладів використання ще немає, але можна привести в приклад створений нещодавно нами микросервис для Host-Tracker.com

image
Надсилає ім'я таски, статус, час даунтайма і час початку даунтайма. При кліці — кидає на сторінку аналітики таски. Пішло все менше 1 години.


Для використання потрібно тільки підписатися на канал, вписати URL і зберегти.

image
Або ж наприклад можна взяти AdminVK там схожа схема, кнопка «Відкрити» переходить до налаштувань микросервиса


Дані приклади зроблені при використанні внутрішньої авторизації PushAll, але ніщо не заважає використовувати передані дані для аутентифікації і роботи цих сервісів.
Наприклад є сторонні IT-запитальник і MySeries в обох використовується стороння аутентифікація, при цьому сервіси в підсумку використовують тільки push-повідомлення через PushAll.

Функціонал ще на стадії тестування і доробок, вітаються пропозиції і фідбек.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.