НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ action: НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action). / РусскоязычноС сообщСство MODX – MODX => AjaxForm + Formit Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ «ΠΠ΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action)»? β€” Π₯Π°Π±Ρ€ Q&A

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ajaxform Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ action

На Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ 6 ΠΌΠΈΠ½. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ² 3 ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ: 14 Ноября 2019

AjaxForm это надстройка для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° FormIt, которая позволяСт ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ„ΠΎΡ€ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ajax (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ FormIt, Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ скрипты). Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° с FormIt Π½Π° AjaxForm достаточно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ запись Π²Ρ‹Π·ΠΎΠ²Π°

Π­Ρ‚Π°ΠΏΡ‹ создания Ajax Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° сайтС:

  1. УстанавливаСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ FormIt ΠΈ AjaxForm.
  2. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‡Π°Π½ΠΊ с HTML Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ.
  3. Π Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ² Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ рСсурсС ΠΈΠ»ΠΈ шаблонС.

Бтандартная Ρ„ΠΎΡ€ΠΌΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи

Π’ AjaxForm Π΅ΡΡ‚ΡŒ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΠΊΠΎΠ½ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ, Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ собствСнныС Ρ„Π°ΠΉΠ»Ρ‹ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… frontend_js ΠΈ frontend_css.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· jGrowl, со статичным сообщСниСм Π²ΠΎ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΎΠΊΠ½Π΅ с id massage

ДокумСнтация сниппСта AjaxForm

AjaxForm

CΠ½ΠΈΠΏΠΏΠ΅Ρ‚ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π»ΡŽΠ±Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ Ρ‡Π΅Ρ€Π΅Π· ajax. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ рассчитан Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с FormIt, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ собствСнный сниппСт.

  • РСгистрируСт Π½ΡƒΠΆΠ½Ρ‹Π΅ скрипты Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅: jQuery.Form ΠΈ jQuery.jGrowl.
  • БохраняСт Π² сСссию $scriptProperties ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ сниппСта.
  • Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, прописывая класс ajax_form ΠΈ скрытый input для получСния $scriptProperties .
  • Π’Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° Ρ„ΠΎΡ€ΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΠ»Π°ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· ajax.
  • ΠŸΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ запускаСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ сниппСт для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ Π½Π΅Π³ΠΎ.
  • Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСниС ΠΎΠ± успСхС, ΠΈΠ»ΠΈ ошибки, Ссли Π΅ΡΡ‚ΡŒ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сниппСта

ИмяПо ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΠŸΠ»Π΅ΠΉΡΡ…ΠΎΠ»Π΄Π΅Ρ€Ρ‹
&formtpl.AjaxForm.exampleΠžΠ±Ρ€Π°Π·Π΅Ρ† Ρ‡Π°Π½ΠΊΠ° с Ρ„ΠΎΡ€ΠΌΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.
&snippetFormIt Π‘Π½ΠΈΠΏΠΏΠ΅Ρ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹.
&frontend_css[[+assetsUrl]]css/default.cssΠ‘Ρ‚ΠΈΠ»ΠΈ оформлСния Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΏΠΎΠ»Π΅ΠΉ с ошибками
&frontend_js[[+assetsUrl]]js/default.jsJavascript для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Ρ‡Π΅Ρ€Π΅Π· ajax
&actionUrl[[+assetsUrl]]action.phpАдрСс ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отправляСтся Ρ„ΠΎΡ€ΠΌΠ°

Всё, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ AjaxForm, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ сниппСт.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° своим сниппСтом

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ собствСнный сниппСт, вмСсто FormIt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ (Ρ…ΠΎΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ страницы Π½Π° сайтС). ЕдинствСнноС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ β€” ΠΎΠ½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ JSON массив с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ:

  • status β€” 1 ΠΈΠ»ΠΈ 0, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ успСх ΠΈΠ»ΠΈ ошибка.
  • message β€” сообщСниС ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ сниппСта, выводится Ссли status = 0.
  • data β€” массив для ΠΏΠΎΠ»Π΅ΠΉ с ошибками, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ являСтся имя поля, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ β€” сообщСниС ΠΎΠ± ошибкС.

Для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сниппСта пСрСдаётся пСрСмСнная $AjaxForm с классом ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ error ΠΈ success ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π°Ρ‡Π΅ ΠΎΡ‚Π²Π΅Ρ‚Π°.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ своСго сниппСта:

Π­Ρ‚ΠΎΡ‚ сниппСт Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈΠΌΠ΅Π½ΠΈ.

Валидация Ρ„ΠΎΡ€ΠΌΡ‹

Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ массив ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅ ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. Π­Ρ‚ΠΈΠΌ полям автоматичСски Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ CSS класс error , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ убираСтся ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅.

Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ javascript ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ afValidated β€” Ссли ΠΎΠ½Π° объявлСна ΠΈ Ρ€Π°Π²Π½Π° false , Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π°.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° javascript ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для удобства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π° Π½Π΅ для Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ af_complete

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΎΡ‚ сСрвСра вызываСтся событиС af_complete, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для обновлСния содСрТимого страницы ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ javascript.

Π’Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ событиС javascript ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ ΠΎΡ‚ сСрвСра. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ°.

redirect Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ страницу сайта, послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹?

ДобавляСм id ΠΊ Ρ„ΠΎΡ€ΠΌΠ΅, Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π² js Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ строки

МоТно просто ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² шаблон с Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ body.

Π’ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ сообщСния

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ AjaxForm Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сообщСния ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ»ΠΈ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ошибок. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… для своих Ρ†Π΅Π»Π΅ΠΉ:

Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Β«ΠΏΡ€ΠΈΠ»ΠΈΠΏΠ°ΡŽΡ‰ΠΈΠΉΒ» popup β€” Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для ΠΏΠΎΠΊΠ°Π·Π° ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… ошибок. Π’ΠΎ Π΅ΡΡ‚ΡŒ, просто Π²Ρ‹Π·Π²Π°Π² сниппСт Π½Π° страницС, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ jQuery.jGrowl ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ приятныС Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ увСдомлСния Π½Π° javascript.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° email сообщСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ FormIt с Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ:

ΠžΡ‚Π»Π°Π΄ΠΊΠ°

ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ провСряйтС, отправляСтся Π»ΠΈ Ρ„ΠΎΡ€ΠΌΠ° Π±Π΅Π· AjaxForm. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ AjaxForm β€” сниппСт-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°, ΠΎΠ½ Π½Π΅ отправляСт письма ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ„ΠΎΡ€ΠΌΡ‹. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ваш сниппСт ΠΈΠ»ΠΈ FormIt.

Π’Π°ΠΊ ΠΆΠ΅ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π² консоль Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ ошибок javascript. Если сСрвСр Π²Ρ‹Π΄Π°Ρ‘Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ 500 ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ register_globals Ρƒ вашСго PHP β€” ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½.

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ такая Π²ΠΎΡ‚ ошибка, появилась ΠΎΠ½Π° Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… сайтах сразу ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ с мСсяц Π½Π°Π·Π°Π΄ (Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСйчас, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ поТаловались Ρ‡Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚). Для простоты ΠΏΠΎΠΊΠ° ΠΈΡ‰Ρƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 1 сайтС. Π€ΠΎΡ€ΠΌΠ° ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² Π₯Ρ€ΠΎΠΌΠ΅, Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Please note that GitHub no longer supports your web browser.

We recommend upgrading to the latest Google Chrome or Firefox.

Join GitHub today

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

AjaxForm / core / components / ajaxform / lexicon / ru / default.inc.php

$_lang [ β€˜ ajaxform β€˜ ] = β€˜ AjaxForm β€˜ ;
$_lang [ β€˜ af_message_close_all β€˜ ] = β€˜ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ всС β€˜ ;
$_lang [ β€˜ af_submit β€˜ ] = β€˜ ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ β€˜ ;
$_lang [ β€˜ af_reset β€˜ ] = β€˜ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ β€˜ ;
$_lang [ β€˜ af_label_name β€˜ ] = β€˜ Имя β€˜ ;
$_lang [ β€˜ af_label_email β€˜ ] = β€˜ E-mail β€˜ ;
$_lang [ β€˜ af_label_message β€˜ ] = β€˜ Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ β€˜ ;
$_lang [ β€˜ af_err_action_ns β€˜ ] = β€˜ НС ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action). β€˜ ;
$_lang [ β€˜ af_err_action_nf β€˜ ] = β€˜ НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action). β€˜ ;
$_lang [ β€˜ af_err_chunk_ns β€˜ ] = β€˜ НС ΡƒΠΊΠ°Π·Π°Π½ Ρ‡Π°Π½ΠΊ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. β€˜ ;
$_lang [ β€˜ af_err_chunk_nf β€˜ ] = β€˜ НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‡Π°Π½ΠΊ Β«[[+name]]Β» с Ρ„ΠΎΡ€ΠΌΠΎΠΉ. β€˜ ;
$_lang [ β€˜ af_err_snippet_ns β€˜ ] = β€˜ НС ΡƒΠΊΠ°Π·Π°Π½ сниппСт для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. β€˜ ;
$_lang [ β€˜ af_err_snippet_nf β€˜ ] = β€˜ НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ сниппСт Β«[[+name]]Β» для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. β€˜ ;
$_lang [ β€˜ af_err_has_errors β€˜ ] = β€˜ Π€ΠΎΡ€ΠΌΠ° содСрТит ошибки β€˜ ;
$_lang [ β€˜ af_success_submit β€˜ ] = β€˜ Π€ΠΎΡ€ΠΌΠ° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π° β€˜ ;
  • Β© 2019 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

AjaxForm + контСкст = «ΠΠ΅ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).»

Π•ΡΡ‚ΡŒ сайт (site.com). Π‘Ρ‚Π°Π»Π° Π·Π°Π΄Π°Ρ‡Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΡΠ΅Ρ€ΠΈΡŽ Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠ², ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ планируСтся ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ. CΠ΄Π΅Π»Π°Π½ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½ (landing.site.com) для этого сайта, установлСн ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ modx ΠΈ Π² Π½Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· контСксты планируСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΈ (landing.site.com/1st/, landing.site.com/2nd/, landing.site.com/3rd/… ) На страницС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· этих Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠ² Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² 4Ρ… Ρ„ΠΎΡ€ΠΌ Ρ‡Π΅Ρ€Π΅Π· ajaxForm ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности Ρ„ΠΎΡ€ΠΌ
ΠΏΡ€ΠΈ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½Π½ΠΎΠΌ ΡŽΠ·Π΅Ρ€Π΅ (Π°Π΄ΠΌΠΈΠ½) Ρ„ΠΎΡ€ΠΌΡ‹ исправно ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ
, Π° Ссли ΡŽΠ·Π΅Ρ€ Π°Π½ΠΎΠ½ΠΈΠΌ (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° сайта), Ρ‚ΠΎ выдаСтся такая ошибка «НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).Β» Π’ Π»ΠΎΠ³Π΅ ошибок Π½Π΅Ρ‚.

Искал Ρ‚ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, всС Ρ‡Ρ‚ΠΎ нашСл:
  • совСт ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· action Ρ„ΠΎΡ€ΠΌΡ‹ β€” Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ.
  • Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ php β€” ΠΈ Ρ‚Π°ΠΊ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ (Π΄Π°ΠΆΠ΅ Π½Π° всякий случай Π² .htcccess раскоммСнтил php_flag register_globals off)
  • ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π½Π° сСрвСрС Π½Π° 755 β€” Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚.
  • Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ ajaxForm грузятся Π΄Π²Π°ΠΆΠ΄Ρ‹ β€” Ρƒ мСня ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·
  • Π΅Ρ‰Π΅ Василий писал Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связано с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ Ρƒ контСкстов Ρ€Π°Π·Π½Ρ‹Π΅ сСссии, Π½ΠΎ ΠΊΠ°ΠΊ это ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ я Π½Π΅ понимаю.
ΠšΡ‚ΠΎ встрСчался с Ρ‚Π°ΠΊΠΎΠΉ ситуациСй ΠΈ Π·Π½Π°Π΅Ρ‚ ΠΊΠ°ΠΊ это Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΡ‚Π·ΠΎΠ²ΠΈΡ‚Π΅ΡΡŒ.

Код Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΠΎΡ€ΠΌ (ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ id ΠΈ name Ρƒ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ самих Ρ„ΠΎΡ€ΠΌ)

[[!AjaxForm?
            &snippet=`FormIt`
            &form=`pusmTpl`
            &emailTpl=`pusmEmailTpl`
            &hooks=`email, FormItSaveForm`
            &formName = `[[+pusm_title]]`
            &formFields = `pusm_title,pusm_phone,pusm_url`
            &fieldNames = `pusm_title==Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°,pusm_phone==НомСр Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°,pusm_url==Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ`
            &emailFromName =`[[!getIp]]` 
            &emailSubject=`Π›Π΅Π½Π΄ΠΈΠ½Π³ - [[+pusm_title]]`
            &emailTo=`{$_modx->config.send_to_emails}`
            &emailFrom=`[email protected]`
            &submitVar=`pusm_submit`
]]
Код Ρ„ΠΎΡ€ΠΌΡ‹:
<form data-abide novalidate action="{$modx->resource->uri}" method="post" accept-charset="utf-8">
    <input type="tel" name="pusm_phone" value="[[!+fi.pusm_phone]]" pattern="integer" maxlength="13" required placeholder="НомСр Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°"><input type="submit" name="pusm_submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ заявку">
    
    <input type="hidden" name="pusm_url" value="{$modx->config.site_url}{$modx->resource->uri}">
    <input type="hidden" name="pusm_ip" value="[[!getIP]]">
    <input type="hidden" name="pusm_title" value="">
</form>

AjaxForm + контСкст = «ΠΠ΅ ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).»

Π•ΡΡ‚ΡŒ сайт (site.com). Π‘Ρ‚Π°Π»Π° Π·Π°Π΄Π°Ρ‡Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Π½Π΅Π³ΠΎ ΡΠ΅Ρ€ΠΈΡŽ Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠ², ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ планируСтся ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π°Π΄ΠΌΠΈΠ½ΠΊΠΈ. CΠ΄Π΅Π»Π°Π½ ΠΏΠΎΠ΄Π΄ΠΎΠΌΠ΅Π½ (landing.site.com) для этого сайта, установлСн ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ modx ΠΈ Π² Π½Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· контСксты планируСтся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΈ (landing.site.com/1st/, landing.site.com/2nd/, landing.site.com/3rd/… ) На страницС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· этих Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠ² Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² 4Ρ… Ρ„ΠΎΡ€ΠΌ Ρ‡Π΅Ρ€Π΅Π· ajaxForm ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности Ρ„ΠΎΡ€ΠΌ ΠΏΡ€ΠΈ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½Π½ΠΎΠΌ ΡŽΠ·Π΅Ρ€Π΅ (Π°Π΄ΠΌΠΈΠ½) Ρ„ΠΎΡ€ΠΌΡ‹ исправно ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ
, Π° Ссли ΡŽΠ·Π΅Ρ€ Π°Π½ΠΎΠ½ΠΈΠΌ (ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅Π»ΡŒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° сайта), Ρ‚ΠΎ выдаСтся такая ошибка «НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).Β» Π’ Π»ΠΎΠ³Π΅ ошибок Π½Π΅Ρ‚.

Искал Ρ‚ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, всС Ρ‡Ρ‚ΠΎ нашСл:
  • совСт ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· action Ρ„ΠΎΡ€ΠΌΡ‹ β€” Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ.
  • Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ php β€” ΠΈ Ρ‚Π°ΠΊ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ (Π΄Π°ΠΆΠ΅ Π½Π° всякий случай Π² .htcccess раскоммСнтил php_flag register_globals off)
  • ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π½Π° сСрвСрС Π½Π° 755 β€” Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚.
  • Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ ajaxForm грузятся Π΄Π²Π°ΠΆΠ΄Ρ‹ β€” Ρƒ мСня ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·
  • Π΅Ρ‰Π΅ Василий писал Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связано с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ Ρƒ контСкстов Ρ€Π°Π·Π½Ρ‹Π΅ сСссии, Π½ΠΎ ΠΊΠ°ΠΊ это ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ я Π½Π΅ понимаю.
ΠšΡ‚ΠΎ встрСчался с Ρ‚Π°ΠΊΠΎΠΉ ситуациСй ΠΈ Π·Π½Π°Π΅Ρ‚ ΠΊΠ°ΠΊ это Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΡ‚Π·ΠΎΠ²ΠΈΡ‚Π΅ΡΡŒ.

Код Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΠΎΡ€ΠΌ (ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ id ΠΈ name Ρƒ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ самих Ρ„ΠΎΡ€ΠΌ)

[[!AjaxForm?
            &snippet=`FormIt`
            &form=`pusmTpl`
            &emailTpl=`pusmEmailTpl`
            &hooks=`email, FormItSaveForm`
            &formName = `[[+pusm_title]]`
            &formFields = `pusm_title,pusm_phone,pusm_url`
            &fieldNames = `pusm_title==Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°,pusm_phone==НомСр Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°,pusm_url==Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ`
            &emailFromName =`[[!getIp]]` 
            &emailSubject=`Π›Π΅Π½Π΄ΠΈΠ½Π³ - [[+pusm_title]]`
            &emailTo=`{$_modx->config.send_to_emails}`
            &emailFrom=`[email protected]`
            &submitVar=`pusm_submit`
]]
Код Ρ„ΠΎΡ€ΠΌΡ‹:
<form data-abide novalidate action="{$modx->resource->uri}" method="post" accept-charset="utf-8">
    <input type="tel" name="pusm_phone" value="[[!+fi.pusm_phone]]" pattern="integer" maxlength="13" required placeholder="НомСр Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°"><input type="submit" name="pusm_submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ заявку">
    
    <input type="hidden" name="pusm_url" value="{$modx->config.site_url}{$modx->resource->uri}">
    <input type="hidden" name="pusm_ip" value="[[!getIP]]">
    <input type="hidden" name="pusm_title" value="">
</form>

НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action) / РусскоязычноС сообщСство MODX

Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь, столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
Π Π°Π½Π΅Π΅ установил Π½Π° сайт AjaxForm + FormIT всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, послС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ всС пСрСстало Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π² Ρ‡Π΅ΠΌ Π΄Π΅Π»ΠΎ.

Π’ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² сниппСта:

[[!AjaxForm? 
                  &form=`tplAjaxForm` 
                  &snippet=`FormIt` 
                  &hooks=`FormItSaveForm,email`
                  &emailSubject=`ВСстовоС сообщСниС`
                  &emailTo=`[email protected]`
                  &emailFrom=`[email protected]`
                  &emailTpl=`tplEmail`
                  &validate=`name:minLength=^2^,email:email:required`
                  &validationErrorMessage=`Π’ Ρ„ΠΎΡ€ΠΌΠ΅ содСрТатся ошибки!`
                  &successMessage=`Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ`
            ]]

Π’ΠΎΡ‚ Ρ‡Π°Π½ΠΊ tplAjaxForm:
<form
              method="post" action="">
                <div>
                  <h3>[[+pagetitle]]</h3>
                  <p>[[+longtitle]]</p>
                </div>
                <div>
                  <div>
                    <label for="af_name">Π’Π°ΡˆΠ΅ имя</label>
                    <input type="text" name="name" value="" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя"/>
                    <span></span>
                  </div>
                  <div>
                    <label for="af_email">Π’Π°Ρˆ Email</label>
                    <input type="email" name="email" value="" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ email"/>
                    <span></span>
                  </div>
                  <div>
                    <label for="af_phone">Π’Π°Ρˆ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½</label>
                    <input type="text" name="phone" value="" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°"/>
                    <span></span>
                  </div>
                  <div>
                    <button type="submit">ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ</button>
                  </div>
                </div>
              </form>
Π’ΠΎΡ‚ Ρ‡Π°Π½ΠΊ tplEmail:
<h4>Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅</h4>
<p>ΠžΡ‚ ΠΊΠΎΠ³ΠΎ: [[+name]]</p>
<p>E-mail: [[+email]]</p>
<p>Π’Π΅Π»Π΅Ρ„ΠΎΠ½: [[+phone]]</p>
Π§Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΏΠΎΠ±Ρ‹Π²Π°Π» всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ отправляСт ΠΈ появляСтся ошибка НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).
ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΡƒΠ΄Π° хотя Π±Ρ‹ ΠΊΠΎΠΏΠ°Ρ‚ΡŒ? Π’ КонсолС Π½ΠΈ Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΈΠ»ΠΈ Π½Π΅ Ρ‚Π°ΠΌ ΡΠΌΠΎΡ‚Ρ€ΡŽ?
Π—Π°Ρ€Π°Π½Π΅Π΅ спасибо!

Π‘Π°ΠΉΡ‚

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ прямо Π² объявлСнии, ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСний ΠΈΠ· профиля.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ modx.pro Π½Π΅ нСсёт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ отвСтствСнности Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΠ»Π°Ρ‚Ρƒ Π·Π°ΠΊΠ°Π·Π°. Π­Ρ‚ΠΎ просто доска объявлСний, дальшС Π²Ρ‹ ΠΎΠ±Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ нашСй ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ.

НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action) / РусскоязычноС сообщСство MODX

Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь, столкнулся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ.
Π Π°Π½Π΅Π΅ установил Π½Π° сайт AjaxForm + FormIT всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, послС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ всС пСрСстало Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π² Ρ‡Π΅ΠΌ Π΄Π΅Π»ΠΎ.

Π’ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² сниппСта:

[[!AjaxForm? 
                  &form=`tplAjaxForm` 
                  &snippet=`FormIt` 
                  &hooks=`FormItSaveForm,email`
                  &emailSubject=`ВСстовоС сообщСниС`
                  &emailTo=`[email protected]`
                  &emailFrom=`[email protected]`
                  &emailTpl=`tplEmail`
                  &validate=`name:minLength=^2^,email:email:required`
                  &validationErrorMessage=`Π’ Ρ„ΠΎΡ€ΠΌΠ΅ содСрТатся ошибки!`
                  &successMessage=`Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ`
            ]]

Π’ΠΎΡ‚ Ρ‡Π°Π½ΠΊ tplAjaxForm:
<form
              method="post" action="">
                <div>
                  <h3>[[+pagetitle]]</h3>
                  <p>[[+longtitle]]</p>
                </div>
                <div>
                  <div>
                    <label for="af_name">Π’Π°ΡˆΠ΅ имя</label>
                    <input type="text" name="name" value="" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя"/>
                    <span></span>
                  </div>
                  <div>
                    <label for="af_email">Π’Π°Ρˆ Email</label>
                    <input type="email" name="email" value="" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ email"/>
                    <span></span>
                  </div>
                  <div>
                    <label for="af_phone">Π’Π°Ρˆ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½</label>
                    <input type="text" name="phone" value="" placeholder="Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°"/>
                    <span></span>
                  </div>
                  <div>
                    <button type="submit">ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ</button>
                  </div>
                </div>
              </form>
Π’ΠΎΡ‚ Ρ‡Π°Π½ΠΊ tplEmail:
<h4>Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅</h4>
<p>ΠžΡ‚ ΠΊΠΎΠ³ΠΎ: [[+name]]</p>
<p>E-mail: [[+email]]</p>
<p>Π’Π΅Π»Π΅Ρ„ΠΎΠ½: [[+phone]]</p>
Π§Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΏΠΎΠ±Ρ‹Π²Π°Π» всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ отправляСт ΠΈ появляСтся ошибка НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).
ΠŸΠΎΠ΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΡƒΠ΄Π° хотя Π±Ρ‹ ΠΊΠΎΠΏΠ°Ρ‚ΡŒ? Π’ КонсолС Π½ΠΈ Ρ‡Π΅Π³ΠΎ Π½Π΅Ρ‚, ΠΈΠ»ΠΈ Π½Π΅ Ρ‚Π°ΠΌ ΡΠΌΠΎΡ‚Ρ€ΡŽ?
Π—Π°Ρ€Π°Π½Π΅Π΅ спасибо!

Π‘Π°ΠΉΡ‚

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ прямо Π² объявлСнии, ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСний ΠΈΠ· профиля.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ modx.pro Π½Π΅ нСсёт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ отвСтствСнности Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΎΠΏΠ»Π°Ρ‚Ρƒ Π·Π°ΠΊΠ°Π·Π°. Π­Ρ‚ΠΎ просто доска объявлСний, дальшС Π²Ρ‹ ΠΎΠ±Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ нашСй ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠΈ.

НСкоррСктная Ρ€Π°Π±ΠΎΡ‚Π° Formit / РусскоязычноС сообщСство MODX

БобствСнно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ. НС вызываСтся Ρ„ΠΎΡ€ΠΌΠ° Ссли стоит ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π½Π΅ΠΊΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ.

Π’.Π΅. Ссли Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ
[[AjaxForm?
                    	&snippet=`FormIt`
                    	&form=`popup-form`
                    	&hooks=`FormItSaveForm,email`
                    	&emailSubject=`Π Π΅ΠΌΠΎΠ½Ρ‚Π‘Π΄Π΅Π»Π°Π½.Π Π€ Заявка`
                        &emailTo=`[[++mail]]`
                        &emailFrom=`[email protected]`
                        &emailFromName=`Π Π΅ΠΌΠΎΠ½Ρ‚Π‘Π΄Π΅Π»Π°Π½.Π Π€ Заявка`
                    	&validate=`namepopup:required,phonepopup:required`
                    	&validationErrorMessage=`Π’ Ρ„ΠΎΡ€ΠΌΠ΅ содСрТатся ошибки!`
                    	&successMessage=`Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ`
                    	&emailTpl=`popup-email-tpl`
                    	&submitVar=`popup-submit`
                    	
                    ]]
Ρ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠ° показываСтся, ΠΎΠ΄Π½Π°ΠΊΠΎ Ссли Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ
[[!AjaxForm?
                    	&snippet=`FormIt`
                    	&form=`popup-form`
                    	&hooks=`FormItSaveForm,email`
                    	&emailSubject=`Π Π΅ΠΌΠΎΠ½Ρ‚Π‘Π΄Π΅Π»Π°Π½.Π Π€ Заявка`
                        &emailTo=`[[++mail]]`
                        &emailFrom=`[email protected]`
                        &emailFromName=`Π Π΅ΠΌΠΎΠ½Ρ‚Π‘Π΄Π΅Π»Π°Π½.Π Π€ Заявка`
                    	&validate=`namepopup:required,phonepopup:required`
                    	&validationErrorMessage=`Π’ Ρ„ΠΎΡ€ΠΌΠ΅ содСрТатся ошибки!`
                    	&successMessage=`Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ`
                    	&emailTpl=`popup-email-tpl`
                    	&submitVar=`popup-submit`
                    	
                    ]]
Ρ‚ΠΎ всС Ρ‡Ρ‚ΠΎ Π΄ΠΎ этой Ρ„ΠΎΡ€ΠΌΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ убираСтся с этой страницы. Π’ Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ совсСм понимаю. Π”Π°ΠΆ Ссли просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ FormIt, Ρ‚ΠΎ история повторяСтся.
И Ссли Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ «НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Ρ„ΠΎΡ€ΠΌΡ‹ (action).Β»

ΠžΠ±Π·ΠΎΡ€ способов ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π²Π΅Π±-прилоТСниях / DataArt corporate blog / Habr

Π― расскаТу ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… способов Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ для Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ, ΠΏΠΎ сСртификатам, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΌ паролям, ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ доступа ΠΈ ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌ. ΠšΠΎΡΠ½ΡƒΡΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° (Single Sign-On), Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ стандарты ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ тСхничСским дСталям, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ освСТим Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ.

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ β€” это заявлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ΅ΠΌ Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ. Π’ зависимости ΠΎΡ‚ ситуации, это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ имя, адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹, Π½ΠΎΠΌΠ΅Ρ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, ΠΈΡ‚Π΄.
  • АутСнтификация β€” прСдоставлСниС Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π², Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚, ΠΊΠ΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ (ΠΎΡ‚ слова β€œauthentic” β€” истинный, ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Ρ‹ΠΉ).
  • Авторизация β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ доступ ΠΊ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠΌΡƒ рСсурсу.

НапримСр, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡƒΠ± вас ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ (спросят вашС имя ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ), Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ (попросят ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ паспорт ΠΈ свСрят Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ) ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΡŽΡ‚ (провСрят, Ρ‡Ρ‚ΠΎ фамилия находится Π² спискС гостСй), ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ пустят Π²Π½ΡƒΡ‚Ρ€ΡŒ.

Аналогично эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСмах, Π³Π΄Π΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΏΠΎΠ΄ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ вашСй ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи (identity) ΠΏΠΎ username ΠΈΠ»ΠΈ email; ΠΏΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΎΡ‚ этой ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, Π° ΠΏΠΎΠ΄ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ вашСй Ρ€ΠΎΠ»ΠΈ Π² систСмС ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ прСдоставлСнии доступа ΠΊ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠΉ страницС ΠΈΠ»ΠΈ рСсурсу.

Однако Π² соврСмСнных систСмах ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС схСмы Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я расскаТу Π΄Π°Π»Π΅Π΅. Но Π½Π°Ρ‡Π½Π΅ΠΌ с простого ΠΈ понятного.

АутСнтификация ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ основываСтся Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ username ΠΈ password для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² систСмС. ΠŸΠ°Ρ€Π° username/password задаСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΏΡ€ΠΈ Π΅Π³ΠΎ рСгистрации Π² систСмС, ΠΏΡ€ΠΈ этом Π² качСствС username ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Π²Π΅Π±-прилоТСниям, сущСствуСт нСсколько стандартных ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассмотрим Π½ΠΈΠΆΠ΅.

HTTP authentication

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», описанный Π² стандартах HTTP 1.0/1.1, сущСствуСт ΠΎΡ‡Π΅Π½ΡŒ Π΄Π°Π²Π½ΠΎ ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ примСняСтся Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ срСдС. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Π²Π΅Π±-сайтам Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
  1. Π‘Π΅Ρ€Π²Π΅Ρ€, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Π½Π΅Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ рСсурсу, отсылаСт HTTP статус β€œ401 Unauthorized” ΠΈ добавляСт Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ β€œWWW-Authenticate” с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ схСмы ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  2. Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€, ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, автоматичСски ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Π²ΠΎΠ΄Π° username ΠΈ password. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π΅Ρ‚Π°Π»ΠΈ своСй ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи.
  3. Π’ΠΎ всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запросах ΠΊ этому Π²Π΅Π±-сайту Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ автоматичСски добавляСт HTTP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ β€œAuthorization”, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСрвСром.
  4. Π‘Π΅Ρ€Π²Π΅Ρ€ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· этого Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. РСшСниС ΠΎ прСдоставлСнии доступа (авторизация) производится ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π° основании Ρ€ΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ACL ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи.

Π’Π΅ΡΡŒ процСсс стандартизирован ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ поддСрТиваСтся всСми Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ ΠΈ Π²Π΅Π±-сСрвСрами. БущСствуСт нСсколько схСм Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ бСзопасности:

  1. Basic β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простая схСма, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ username ΠΈ password ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Authorization Π² Π½Π΅Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (base64-encoded). Однако ΠΏΡ€ΠΈ использовании HTTPS (HTTP over SSL) ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, являСтся ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ бСзопасной.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ HTTP Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с использованиСм Basic схСмы.
  2. Digest β€” challenge-response-схСма, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сСрвСр посылаСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nonce, Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ MD5 Ρ…ΡΡˆ пароля ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, вычислСнный с использованиСм ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ nonce. Π‘ΠΎΠ»Π΅Π΅ бСзопасная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π² Basic схСмы ΠΏΡ€ΠΈ Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… соСдинСниях, Π½ΠΎ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π° man-in-the-middle attacks (с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ схСмы Π½Π° basic). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, использованиС этой схСмы Π½Π΅ позволяСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ соврСмСнныС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для хранСния ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° сСрвСрС.
  3. NTLM (извСстная ΠΊΠ°ΠΊ Windows authentication) β€” Ρ‚Π°ΠΊΠΆΠ΅ основана Π½Π° challenge-response ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π½Π΅ пСрСдаСтся Π² чистом Π²ΠΈΠ΄Π΅. Π­Ρ‚Π° схСма Π½Π΅ являСтся стандартом HTTP, Π½ΠΎ поддСрТиваСтся Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΈ Π²Π΅Π±-сСрвСров. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Windows Active Directory Π² Π²Π΅Π±-прилоТСниях. Уязвима ΠΊ pass-the-hash-Π°Ρ‚Π°ΠΊΠ°ΠΌ.
  4. Negotiate β€” Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° схСма ΠΈΠ· сСмСйства Windows authentication, которая позволяСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ NTLM ΠΈ Kerberos Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ. Kerberos β€” Π±ΠΎΠ»Π΅Π΅ бСзопасный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», основанный Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Single Sign-On. Однако ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈ сСрвСр находятся Π² Π·ΠΎΠ½Π΅ intranet ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΎΠΌΠ΅Π½Π° Windows.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании HTTP-Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅Ρ‚ стандартной возмоТности Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· Π²Π΅Π±-прилоТСния, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ всС ΠΎΠΊΠ½Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.
Forms authentication

Для этого ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π½Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ стандарта, поэтому всС Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ спСцифичны для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… систСм, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅, для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ: Π² Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ HTML-Ρ„ΠΎΡ€ΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ввСсти свои username/password ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° сСрвСр Ρ‡Π΅Ρ€Π΅Π· HTTP POST для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ случаС успСха Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ создаСт session token, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ помСщаСтся Π² browser cookies. ΠŸΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅Π±-запросах session token автоматичСски пСрСдаСтся Π½Π° сСрвСр ΠΈ позволяСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ запроса.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ forms authentication.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ session token двумя способами:

  1. Как ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ сСссии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, которая хранится Π² памяти сСрвСра ΠΈΠ»ΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. БСссия Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ для возмоТности Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π³ΠΎ запросов.
  2. Как Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ/ΠΈΠ»ΠΈ подписанный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ дСйствия. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ stateless-Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ сСрвСра, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° обновлСния сСссионного Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΏΠΎ истСчСнии срока дСйствия. НСсколько стандартных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² сСкции «АутСнтификация ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΒ».

НСобходимо ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ session token Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π΄Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа, Ρ‡Ρ‚ΠΎ ΠΈ Π·Π½Π°Π½ΠΈΠ΅ username/password. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Π² случаС forms authentication Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ соСдинСнию HTTPS.
Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ

Π”Π²Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, описанных Π²Ρ‹ΡˆΠ΅, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π²Π΅Π±-сайтах. Но ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с использованиСм Π²Π΅Π±-сСрвисов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, iOS ΠΈΠ»ΠΈ Android), наряду с HTTP Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ, часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ нСстандартныС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Π΅ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях запроса.

БущСствуСт всСго нСсколько мСст, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ username ΠΈ password Π² HTTP запросах:

  1. URL query β€” считаСтся нСбСзопасным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ, Ρ‚. ΠΊ. строки URL ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒΡΡ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, прокси ΠΈ Π²Π΅Π±-сСрвСрами.
  2. Request body β€” бСзопасный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для запросов, содСрТащих Ρ‚Π΅Π»ΠΎ сообщСния (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ POST, PUT, PATCH).
  3. HTTP header β€”ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΏΡ€ΠΈ этом ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ стандартный Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Authorization (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Basic-схСмой), ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ.
РаспространСнныС уязвимости ΠΈ ошибки Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
АутСнтификации ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ считаСтся Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ способом, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ часто ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ, Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ склонны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простыС ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… систСмах, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° ΠΊΠ»ΠΎΡ‡ΠΊΠ°Ρ… Π±ΡƒΠΌΠ°Π³ΠΈ. Если Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ смог Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΎΠ± этом Π½Π΅ ΡƒΠ·Π½Π°Π΅Ρ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ряд ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ошибок, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… Π²Π·Π»ΠΎΠΌ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй.

НиТС прСдставлСн список Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ уязвимостСй Π² случаС использования Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ:

  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ простыС ΠΏΠ°Ρ€ΠΎΠ»ΠΈ.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ ΠΎΡ‚ возмоТности ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ (brute-force attacks).
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ само Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ распространяСт ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ смСны пароля послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° (Ρ‚.Π΅. Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ записан).
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ допускаСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΏΠΎ Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ HTTP-соСдинСнию, Π»ΠΈΠ±ΠΎ Π² строкС URL.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ бСзопасныС Ρ…ΡΡˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для хранСния ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ измСнСния пароля Π»ΠΈΠ±ΠΎ Π½Π΅ Π½ΠΎΡ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΡ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΡΠ·Π²ΠΈΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ восстановлСния пароля, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для получСния нСсанкционированного доступа ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌ записям.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ для Π²Π°ΠΆΠ½Ρ‹Ρ… дСйствий: смСна пароля, измСнСния адрСса доставки Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΠΈ Ρ‚. ΠΏ.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ создаСт session tokens Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π½Ρ‹ ΠΈΠ»ΠΈ прСдсказаны для Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ допускаСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ session tokens ΠΏΠΎ Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌΡƒ HTTP-соСдинСнию, Π»ΠΈΠ±ΠΎ Π² строкС URL.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ уязвимо для session fixation-Π°Ρ‚Π°ΠΊ (Ρ‚. Π΅. Π½Π΅ замСняСт session token ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ сСссии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ).
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ устанавливаСт Ρ„Π»Π°Π³ΠΈ HttpOnly ΠΈ Secure для browser cookies, содСрТащих session tokens.
  • Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ сСссии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ послС ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° нСактивности Π»ΠΈΠ±ΠΎ Π½Π΅ прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ сСссии.
АутСнтификация ΠΏΠΎ сСртификатам

Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ прСдставляСт собой Π½Π°Π±ΠΎΡ€ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, подписанный certificate authority (CA). CA выступаСт Π² Ρ€ΠΎΠ»ΠΈ посрСдника, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ сСртификатов (ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ЀМБ, Π²Ρ‹ΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΉ паспорта). Π’Π°ΠΊΠΆΠ΅ сСртификат криптографичСски связан с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Ρƒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° сСртификата ΠΈ позволяСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ владСния сСртификатом.

На сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сСртификат вмСстС с Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Π² Ρ„Π°ΠΉΠ»Π΅, Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ физичСском устройствС (smart card, USB token). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ ΠΈΠ»ΠΈ PIN-ΠΊΠΎΠ΄ΠΎΠΌ.

Π’ Π²Π΅Π±-прилоТСниях Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ сСртификаты стандарта X.509. АутСнтификация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ X.509-сСртификата происходит Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ соСдинСния с сСрвСром ΠΈ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° SSL/TLS. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ поддСрТиваСтся Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ сСртификат, Ссли Π²Π΅Π±-сайт допускаСт Ρ‚Π°ΠΊΠΎΠΉ способ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.


ИспользованиС сСртификата для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

Π’ΠΎ врСмя Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСрвСр выполняСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сСртификата Π½Π° основании ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»:

  1. Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ подписан Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ certification authority (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ сСртификатов).
  2. Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π΄Π°Ρ‚Ρƒ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° срока дСйствия).
  3. Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΎΠ·Π²Π°Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ CA (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° списков ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ).


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ X.509 сСртификата.

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ запроса Π½Π° основании Ρ‚Π°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… сСртификата, ΠΊΠ°ΠΊ subject (имя Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°), issuer (эмитСнт), serial number (сСрийный Π½ΠΎΠΌΠ΅Ρ€ сСртификата) ΠΈΠ»ΠΈ thumbprint (ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° сСртификата).

ИспользованиС сСртификатов для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ β€” ΠΊΡƒΠ΄Π° Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ способ, Ρ‡Π΅ΠΌ аутСнтификация посрСдством ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. Π­Ρ‚ΠΎ достигаСтся созданиСм Π² процСссС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΊΡ‚ примСнСния Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации (non-repudiation). Однако трудности с распространСниСм ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ сСртификатов Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ способ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ малодоступным Π² ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… ΠΊΡ€ΡƒΠ³Π°Ρ….

АутСнтификация ΠΏΠΎ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΌ паролям

АутСнтификация ΠΏΠΎ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΌ паролям ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ примСняСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ паролям для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ two-factor authentication (2FA). Π’ этой ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² для Π²Ρ…ΠΎΠ΄Π° Π² систСму: Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π½Π°Π΅Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ), ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Π΅ΠΌ ΠΎΠ½ Π²Π»Π°Π΄Π΅Π΅Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, устройство для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ). НаличиС Π΄Π²ΡƒΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² позволяСт Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности, Ρ‡Ρ‚ΠΎ ΠΌ. Π±. вострСбовано для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ популярный сцСнарий использования ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ β€” Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ аутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²ΠΎ врСмя выполнСния Π²Π°ΠΆΠ½Ρ‹Ρ… дСйствий: ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π΄Π΅Π½Π΅Π³, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ настроСк ΠΈ Ρ‚. ΠΏ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ источники для создания ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. НаиболСС популярныС:

  1. АппаратныС ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π½Π° основании сСкрСтного ΠΊΠ»ΡŽΡ‡Π°, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π½ΠΈΡ…, ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π‘Π΅ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ владСния, Ρ‚Π°ΠΊΠΆΠ΅ хранятся Π½Π° сСрвСрС, Ρ‡Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² β€” RSA SecurID; ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ β€” ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Google Authenticator.
  2. Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠ΄Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ρ‡Π΅Ρ€Π΅Π· SMS ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ°Π½Π°Π» связи. Π’ этой ситуации Ρ„Π°ΠΊΡ‚ΠΎΡ€ владСния β€” Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (Ρ‚ΠΎΡ‡Π½Π΅Π΅ β€” SIM-ΠΊΠ°Ρ€Ρ‚Π°, привязанная ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ).
  3. РаспСчатка ΠΈΠ»ΠΈ scratch card со списком Π·Π°Ρ€Π°Π½Π΅Π΅ сформированных ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° Π² систСму трСбуСтся ввСсти Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ.


Аппаратный Ρ‚ΠΎΠΊΠ΅Π½ RSA SecurID Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 30 сСкунд.

Π’ Π²Π΅Π±-прилоТСниях Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ часто рСализуСтся посрСдством Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ forms authentication: послС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ, создаСтся сСссия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² контСкстС этой сСссии ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠΌΡƒ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ.

АутСнтификация ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ доступа

Π­Ρ‚ΠΎΡ‚ способ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ устройств, сСрвисов ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π²Π΅Π±-сСрвисам. Π—Π΄Π΅ΡΡŒ Π² качСствС сСкрСта ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡ΠΈ доступа (access key, API key) β€” Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ строки, содСрТащиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ символов, ΠΏΠΎ сути Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ собой ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ username/password.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв, сСрвСр Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ΠΈ доступа ΠΏΠΎ запросу ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π»Π΅Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ эти ΠΊΠ»ΡŽΡ‡ΠΈ Π² клиСнтских прилоТСниях. ΠŸΡ€ΠΈ создании ΠΊΠ»ΡŽΡ‡Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ срок дСйствия ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого ΠΊΠ»ΡŽΡ‡Π°.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ β€” ΠΎΠ±Π»Π°ΠΊΠΎ Amazon Web Services. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΅ΡΡ‚ΡŒ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, ΠΈ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвис Amazon S3 для хранСния Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‡Π΅Ρ€Π΅Π· консоль AWS ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΎΠ±Π»Π°ΠΊΡƒ: Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅/запись Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Amazon S3. Π­Ρ‚ΠΎΡ‚ ΠΊΠ»ΡŽΡ‡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²Π΅Π±-прилоТСния Π² ΠΎΠ±Π»Π°ΠΊΠ΅ AWS.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ примСнСния Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.

ИспользованиС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ пароля ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ сторонним прилоТСниям (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сохранил Π² Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ свой ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Π° ΠΊΠ»ΡŽΡ‡ доступа). ΠšΠ»ΡŽΡ‡ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большСй энтропиСй ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с паролями, поэтому ΠΈΡ… практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли ΠΊΠ»ΡŽΡ‡ Π±Ρ‹Π» раскрыт, это Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚Π°Ρ†ΠΈΠΈ основной ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ β€” достаточно лишь Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠ»ΡŽΡ‡ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ.

Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, здСсь Π½Π΅ сущСствуСт Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°: ΠΊΠ»ΡŽΡ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… частях HTTP-запроса: URL query, request body ΠΈΠ»ΠΈ HTTP header. Как ΠΈ Π² случаС Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” использованиС HTTP header. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ HTTP-схСму Bearer для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ (Authorization: Bearer [token]). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, соСдинСниС с сСрвСром Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ SSL/TLS.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ доступа, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² HTTP Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ слоТныС схСмы Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ для Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… соСдинСний. Π’ этом случаС, ΠΊΠ»ΡŽΡ‡ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоит ΠΈΡ… Π΄Π²ΡƒΡ… частСй: ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈ сСкрСтной. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π° сСкрСтная Ρ‡Π°ΡΡ‚ΡŒ позволяСт ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ подпись. НапримСр, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с digest authentication схСмой, сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nonce ΠΈΠ»ΠΈ timestamp, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ…ΡΡˆ ΠΈΠ»ΠΈ HMAC этого значСния, вычислСнный с использованиСм сСкрСтной части ΠΊΠ»ΡŽΡ‡Π°. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ всСго ΠΊΠ»ΡŽΡ‡Π° Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ replay attacks.

АутСнтификация ΠΏΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌ

Π’Π°ΠΊΠΎΠΉ способ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ‡Π°Ρ‰Π΅ всСго примСняСтся ΠΏΡ€ΠΈ построСнии распрСдСлСнных систСм Single Sign-On (SSO), Π³Π΄Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (service provider ΠΈΠ»ΠΈ relying party) Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ (identity provider ΠΈΠ»ΠΈ authentication service). Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ этого способа β€” Π²Ρ…ΠΎΠ΄ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях. Π—Π΄Π΅ΡΡŒ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСти ΡΠ²Π»ΡΡŽΡ‚ΡΡ сСрвисами Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ довСряСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ сСтям.

РСализация этого способа Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ identity provider (IP) прСдоставляСт достовСрныС свСдСния ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ Π² Π²ΠΈΠ΄Π΅ Ρ‚ΠΎΠΊΠ΅Π½Π°, Π° service provider (SP) ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот Ρ‚ΠΎΠΊΠ΅Π½ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
На ΠΎΠ±Ρ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, вСсь процСсс выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ аутСнтифицируСтся Π² identity provider ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов, спСцифичным для Π½Π΅Π³ΠΎ (ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΊΠ»ΡŽΡ‡ доступа, сСртификат, Kerberos, ΠΈΡ‚Π΄.).
  2. ΠšΠ»ΠΈΠ΅Π½Ρ‚ просит identity provider ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ Ρ‚ΠΎΠΊΠ΅Π½ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ SP-прилоТСния. Identity provider Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ отправляСт Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.
  3. ΠšΠ»ΠΈΠ΅Π½Ρ‚ аутСнтифицируСтся Π² SP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этого Ρ‚ΠΎΠΊΠ΅Π½Π°.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Β«Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎΒ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ посрСдством Bearer схСмы.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ, описанный Π²Ρ‹ΡˆΠ΅, ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚. Π΅. Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, iOS/Android прилоТСния). Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΆΠ΅ β€” пассивный ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ страницы, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ этом случаС аутСнтификация достигаСтся посрСдством автоматичСского пСрСнаправлСния Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π΅Π±-прилоТСниями identity provider ΠΈ service provider.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ «пассивного» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° посрСдством пСрСнаправлСния запросов.

БущСствуСт нСсколько стандартов, Π² точности ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ (Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΈ пассивными) ΠΈ IP/SP-прилоТСниями ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Π‘Ρ€Π΅Π΄ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярных стандартов β€” OAuth, OpenID Connect, SAML, ΠΈ WS-Federation. НСкоторая информация ΠΎΠ± этих ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… β€” Π½ΠΈΠΆΠ΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π‘Π°ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдставляСт собой структуру Π΄Π°Π½Π½Ρ‹Ρ…, которая содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΡ‚ΠΎ сгСнСрировал Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΎΠΊΠ΅Π½Π°, срок дСйствия, Π½Π°Π±ΠΎΡ€ свСдСний ΠΎ самом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ (claims). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚ΠΎΠΊΠ΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ подписываСтся для прСдотвращСния нСсанкционированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ подлинности.

ΠŸΡ€ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΠΊΠ΅Π½Π° SP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ:

  1. Π’ΠΎΠΊΠ΅Π½ Π±Ρ‹Π» Π²Ρ‹Π΄Π°Π½ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ identity provider ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° поля issuer).
  2. Π’ΠΎΠΊΠ΅Π½ прСдназначаСтся Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ SP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° поля audience).
  3. Π‘Ρ€ΠΎΠΊ дСйствия Ρ‚ΠΎΠΊΠ΅Π½Π° Π΅Ρ‰Π΅ Π½Π΅ истСк (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° поля expiration date).
  4. Π’ΠΎΠΊΠ΅Π½ ΠΏΠΎΠ΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΈ Π½Π΅ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подписи).

Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ SP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСт Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ запроса Π½Π° основании Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅, содСрТащихся Π² Ρ‚ΠΎΠΊΠ΅Π½Π΅.

Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²

БущСствуСт нСсколько распространСнных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² для Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:
  1. Simple Web Token (SWT) β€” Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€ имя/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ кодирования HTML form. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ опрСдСляСт нСсколько Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½: Issuer, Audience, ExpiresOn ΠΈ HMACSHA256. Π’ΠΎΠΊΠ΅Π½ подписываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ симмСтричного ΠΊΠ»ΡŽΡ‡Π°, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±Π° IP- ΠΈ SP-прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ этот ΠΊΠ»ΡŽΡ‡ для возмоТности создания/ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ SWT Ρ‚ΠΎΠΊΠ΅Π½Π° (послС дСкодирования).

    Issuer=http://auth.myservice.com&
    Audience=http://myservice.com&
    ExpiresOn=1435937883&
    UserName=John Smith&
    UserRole=Admin&
    HMACSHA256=KOUQRPSpy64rvT2KnYyQKtFFXUIggnesSpE7ADA4o9w

  2. JSON Web Token (JWT) β€” содСрТит Ρ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ»Π΅ΠΉ (claims) ΠΈ подпись. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π±Π»ΠΎΠΊΠ° прСдставлСны Π² JSON-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ base64. Набор ΠΏΠΎΠ»Π΅ΠΉ содСрТит ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‹ имя/значСния, ΠΏΡ€ΠΈΡ‚ΠΎΠΌ стандарт JWT опрСдСляСт нСсколько Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ (iss, aud, exp ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅). Подпись ΠΌΠΎΠΆΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΈ симмСтричных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΈ асиммСтричных. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ стандарт, ΠΎΡ‚ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ JWT-Ρ‚ΠΎΠΊΠ΅Π½Π°.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ подписанного JWT Ρ‚ΠΎΠΊΠ΅Π½Π° (послС дСкодирования 1 ΠΈ 2 Π±Π»ΠΎΠΊΠΎΠ²).

    { Β«algΒ»: Β«HS256Β», Β«typΒ»: Β«JWTΒ» }.
    { Β«issΒ»: Β«auth.myservice.comΒ», Β«audΒ»: Β«myservice.comΒ», Β«expΒ»: Β«1435937883Β», Β«userNameΒ»: Β«John SmithΒ», Β«userRoleΒ»: Β«AdminΒ» }.
    S9Zs/8/uEGGTVVtLggFTizCsMtwOJnRhjaQ2BMUQhcY
  3. Security Assertion Markup Language (SAML) β€” опрСдСляСт Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ (SAML assertions) Π² XML-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± эмитСнтС, ΠΎ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ условия для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°, Π½Π°Π±ΠΎΡ€ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ (statements) ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅. Подпись SAML-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ассимСтричной ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², SAML-Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ содСрТат ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для подтвСрТдСния владСния Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· man-in-the-middle-Π°Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΈ использовании Π½Π΅Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… соСдинСний.
Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ SAML

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Security Assertion Markup Language (SAML) описываСт способы взаимодСйствия ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ identity provider ΠΈ service provider для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ посрСдством Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ вСрсии 1.0 ΠΈ 1.1 Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π² 2002 – 2003 Π³Π³., Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ вСрсия 2.0, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰Π°Ρ стандарт ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ нСсовмСстимая, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² 2005 Π³.

Π­Ρ‚ΠΎΡ‚ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ стандарт β€” достаточно слоТный ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сцСнариСв ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ систСм. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Β«ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈΒ» стандарта:

  1. Assertions β€” собствСнный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ SAML Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π² XML Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.
  2. Protocols β€” Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… сообщСний ΠΌΠ΅ΠΆΠ΄Ρƒ участниками, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… β€” запрос Π½Π° созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· систСмы (logout), ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.
  3. Bindings β€” ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ транспортныС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ способы, ΠΊΠ°ΠΊ HTTP Redirect, HTTP POST, HTTP Artifact (ссылка Π½Π° сообщСния), SAML SOAP, SAML URI (адрСс получСния сообщСния) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.
  4. Profiles β€” Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ сцСнарии использования стандарта, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€ assertions, protocols ΠΈ bindings Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ совмСстимости. Web Browser SSO β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, стандарт опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ участниками, которая Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠ»ΡŽΡ‡ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ‚. ΠΏ.

Рассмотрим ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования SAML для сцСнария Single Sign-On. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ рСсурс сСрвис-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° (шаг β„– 1 Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ пассивных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²). Π’. ΠΊ. ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π±Ρ‹Π» Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½, SP отправляСт Π΅Π³ΠΎ Π½Π° сайт identity provider’а для создания Ρ‚ΠΎΠΊΠ΅Π½Π° (шаг β„– 2). НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π° SP, Π³Π΄Π΅ послСдний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SAML HTTP Redirect binding для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСния с запросом Ρ‚ΠΎΠΊΠ΅Π½Π°:

Π’ случаС Ρ‚Π°ΠΊΠΎΠ³ΠΎ запроса, identity provider Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (шаги β„–3-4), послС Ρ‡Π΅Π³ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π° IP с использованиСм HTTP POST binding (шаг β„– 5):

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ автоматичСски ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ эту Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° сайт service provider’а (шаг β„– 6), послСдний Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ запроса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠΌΡƒ рСсурсу (шаг β„– 7).

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ WS-Trust ΠΈ WS-Federation

WS-Trust ΠΈ WS-Federation входят Π² Π³Ρ€ΡƒΠΏΠΏΡƒ стандартов WS-*, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… SOAP/XML-Π²Π΅Π± сСрвисы. Π­Ρ‚ΠΈ стандарты Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΠΊΡƒΠ΄Π° входят Microsoft, IBM, VeriSign ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Наряду с SAML, эти стандарты достаточно слоТныС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ прСимущСствСнно Π² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… сцСнариях.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ WS-Trust описываСт интСрфСйс сСрвиса Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΠΌΠ΅Π½ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Secure Token Service (STS). Π­Ρ‚ΠΎΡ‚ сСрвис Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ SOAP ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ созданиС, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². ΠŸΡ€ΠΈ этом стандарт допускаСт использованиС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ SAML-Ρ‚ΠΎΠΊΠ΅Π½Ρ‹.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ WS-Federation касаСтся ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² взаимодСйствия сСрвисов ΠΌΠ΅ΠΆΠ΄Ρƒ компаниями, Π² частности, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ². ΠŸΡ€ΠΈ этом WS-Federation Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ интСрфСйс сСрвиса STS, описанного Π² стандартС WS-Trust. Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, стандарт WS-Federation опрСдСляСт:

  • Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ способы ΠΎΠ±ΠΌΠ΅Π½Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ сСрвисах.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· всСх систСм (single sign-out).
  • БСрвис Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.
  • БСрвис псСвдонимов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ пассивных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² (Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ²) посрСдством пСрСнаправлСния.

МоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ WS-Federation позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ SAML, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈ рСализация Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ OAuth ΠΈ OpenID Connect

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ SAML ΠΈ WS-Federation, стандарт OAuth (Open Authorization) Π½Π΅ описываСт ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ВмСсто этого ΠΎΠ½ опрСдСляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ получСния доступа ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Однако ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ схСмы, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Π±Π°Π·Π΅ этого стандарта (ΠΎΠ± этом β€” Π½ΠΈΠΆΠ΅).

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия стандарта Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π°ΡΡŒ Π² 2007 – 2010 Π³Π³., Π° тСкущая вСрсия 2.0 ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² 2012 Π³. ВСрсия 2.0 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ стандарт, Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ нСсовмСстима с вСрсиСй 1.0. БСйчас OAuth 2.0 ΠΎΡ‡Π΅Π½ΡŒ популярСн ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ повсСмСстно для прСдоставлСния Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ доступа ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅-стороннСй Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ сам стандарт, рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π΅Π±-прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΡ. Как Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ½ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ писСм с подтвСрТдСниями Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ автоматичСски Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚. Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, ΠΊΠ°ΠΊ это Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ бСзопасно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠΎΡ‡Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊ Gmail?

> ΠŸΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ своСй ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи? β€” ΠΏΠ»ΠΎΡ…ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.
> ΠŸΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ доступа? β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ вСсьма слоТно.

Как Ρ€Π°Π· эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈ позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ стандарт OAuth: ΠΎΠ½ описываСт, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠΉ (client) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠΎΡ‡Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (resource server) с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (resource owner). Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ вСсь процСсс состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… шагов:

  1. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ (resource owner) Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ (client) Π½Π° доступ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ рСсурсу Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Π½Ρ‚Π°. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Ρ€Π°Π½Ρ‚, рассмотрим Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅.
  2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ обращаСтся ΠΊ сСрвСру Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ доступа ΠΊ рСсурсу Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° свой Π³Ρ€Π°Π½Ρ‚. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ сСрвСр Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Google. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ аутСнтифицируСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π° доступа, Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΌ Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ рСгистрации.
  3. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ этот Ρ‚ΠΎΠΊΠ΅Π½ для получСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ сСрвСра рСсурсов (Π² нашСм случаС β€” сСрвис Gmail).


ВзаимодСйствиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² стандартС OAuth.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ описываСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π²ΠΈΠ΄Π° Π³Ρ€Π°Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ сцСнарии примСнСния:

  1. Authorization Code β€” этот Π³Ρ€Π°Π½Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ подтвСрТдСния согласия Π½Π° прСдоставлСниС доступа. Π’Π°ΠΊΠΎΠΉ способ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π²Π΅Π±-прилоТСниях. ΠŸΡ€ΠΎΡ†Π΅ΡΡ получСния Π³Ρ€Π°Π½Ρ‚Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ пассивных ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Π² SAML ΠΈ WS-Federation.
  2. Implicit β€” примСняСтся, ΠΊΠΎΠ³Π΄Π° Ρƒ прилоТСния Π½Π΅Ρ‚ возмоТности бСзопасно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ ΠΎΡ‚ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, JavaScript-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅). Π’ этом случаС Π³Ρ€Π°Π½Ρ‚ прСдставляСт собой Ρ‚ΠΎΠΊΠ΅Π½, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π° шаг β„– 2 ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΈΠ· сцСнария Π²Ρ‹ΡˆΠ΅.
  3. Resource Owner Password Credentials β€” Π³Ρ€Π°Π½Ρ‚ прСдставляСт собой ΠΏΠ°Ρ€Ρƒ username/password ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ являСтся «интСрфСйсом» для сСрвСра рСсурсов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ для Gmail).
  4. Client Credentials β€” Π² этом случаС Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ своим рСсурсам ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ своих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ доступа (ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ шаг β„– 1).

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π½Π΅ опрСдСляСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Π² сцСнариях, адрСсуСмых стандартом, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅Ρ‚ нСобходимости Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½, Ρ‚. ΠΊ. ΠΎΠ½ лишь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для получСния доступа ΠΊ рСсурсам. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½, Π½ΠΈ Π³Ρ€Π°Π½Ρ‚ сами ΠΏΠΎ сСбС Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Однако Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ нСсколько способов это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ:

  1. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ API сСрвСра рСсурсов Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ самом ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /me Π² Facebook API). ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эту ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· послС получСния Ρ‚ΠΎΠΊΠ΅Π½Π° для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ псСвдо-Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандарт OpenID Connect, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ слой ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ²Π΅Ρ€Ρ… OAuth (ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² 2014 Π³.). Π’ соотвСтствии с этим стандартом, сСрвСр Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ прСдоставляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ identity token Π½Π° шагС β„– 2. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JWT Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ (claims) с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅.

Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ OpenID Connect, замСнивший ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вСрсии стандарта OpenID 1.0 ΠΈ 2.0, Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π½Π°Π±ΠΎΡ€ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ для поиска сСрвСров Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, динамичСской рСгистрации ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ управлСния сСссиСй ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Π²Π΅Π±-прилоТСниях. НиТС β€” Ρ‚Π°Π±Π»ΠΈΡ†Π°, которая Ρ€Π΅Π·ΡŽΠΌΠΈΡ€ΡƒΠ΅Ρ‚ описанныС способы ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹:

Бпособ


ОсновноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅


ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹


По ΠΏΠ°Ρ€ΠΎΠ»ΡŽ


АутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ


HTTP, Forms


По сСртификатам


АутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² бСзопасных прилоТСниях; аутСнтификация сСрвисов


SSL/TLS


По ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹ΠΌ паролям


Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ аутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (для достиТСния two-factor authentication)


Forms


По ΠΊΠ»ΡŽΡ‡Π°ΠΌ доступа


АутСнтификация сСрвисов ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ



По Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌ


ДСлСгированная аутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ; дСлСгированная авторизация ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ


SAML, WS-Federation, OAuth, OpenID Connect


НадСюсь, Ρ‡Ρ‚ΠΎ информация оказалась ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΈ Π²Ρ‹ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΡ€ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π”ΠΎ Π½ΠΎΠ²Ρ‹Ρ… встрСч!

Автор: Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ Выростков, Solutions Architect Π² DataArt.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *