Како осигурати Фласк РЕСТ АПИ са ЈСОН Веб Токеном?

Научимо како заштитити РЕСТ АПИ са ЈСОН веб токенима како би се спречило да корисници и треће апликације злоупотребе.


Изградићемо услугу базе података користећи СКЛите и омогућити корисницима да му приступају путем РЕСТ АПИ-ја коришћењем ХТТП метода као што су ПОСТ и ПУТ.

Поред тога, упознат ћемо зашто су ЈСОН веб токени погодан начин заштите АПИ-ја за одмор уместо пробаве и основне аутентификације. Пре него што наставимо, разумемо термин ЈСОН веб токена, РЕСТ АПИ и Фласк фраме.

ЈСОН веб токени

ЈСОН веб токен, такође познат као ЈВТ, је сигуран начин преношења случајних токена између две стране или ентитета. ЈСОН се обично састоји од три дела који следе.

  • Корисни терет
  • Хеадер
  • Потпис

ЈСОН користи две врсте структуралних облика приликом преноса података или информација између две стране.

  • Серијализован
  • Десериализован

Серијализовани образац користи се при преносу података на мрежу путем сваког захтева и одговора, док се десериализовани образац користи при читању и писању података у токен веб.

У сериализованом облику постоје три компоненте.

  • Хеадер
  • Корисни терет
  • Потпис

Компонента заглавља дефинира криптографске податке о токенима. На пример:

  • Да ли је потписан или није потписан ЈВТ?
  • Дефинишите технике алгоритма

Десериализовани облик, за разлику од сериализованог облика, садржи две компоненте.

  • Корисни терет
  • Хеадер

РЕСТ АПИ

АПИ (интерфејс за програмирање апликација) омогућава комуникацију између две апликације за преузимање или достављање података. Постоје две популарне врсте АПИ-ја – веб и системски АПИ.

У овом ћемо чланку само погледати веб АПИ. Постоје две врсте веб АПИ-ја.

  • Захтев – АПИ одговора: Одмор, ГрапхКЛ, Позив на даљински поступак (РПЦ)
  • Евент-дривен АПИ: ВебХоокс, Веб Соцкетс, ХТТП Стреаминг

РЕСТ АПИ спада у категорију захтев-одговор. За обављање АПИ операција користи ХТТП методе као што су ГЕТ, ПОСТ и ПУТ.

Класичан пример је када корисник шаље ГЕТ метод веб сервису да затражи или преузме одређени ресурс или колекцију ресурса. Затим сервер шаље одређени ресурс или колекцију ресурса назад кориснику који га је затражио.

Фласк Фрамеворк

Фласк је оквир заснован на питхон-у. То је микро-оквир који користе програмери питхон-а за изградњу АПИ-ја за одмор. Назван је микро оквиром јер омогућава програмерима, на пример, да додају прилагођену аутентификацију и било који други резервни систем на основу преференција.

Започнимо с имплементацијом. Моје подешавање система је следеће.

  • Убунту као ОС
  • Питхон 2.7+
  • Поштар

Подесите виртуелно окружење користећи виртуаленв

Морамо поставити виртуално окружење како бисмо осигурали да неки пакети неће бити у сукобу са системским пакетима. Користимо виртуаленв за постављање новог виртуелног окружења.

Под претпоставком да вам је на вашем систему доступна пип наредба, покрените сљедећу наредбу путем пип-а да бисте је инсталирали.

пип инсталл виртуаленв

Ако немате пипу на свом рачунару, следите ово документацију да инсталирате пип на свој систем.

Затим направимо директоријум за складиштење или задржавање нашег виртуелног окружења. Употријебите наредбу мкдир приказану доље за креирање директорија

мкдир флашкапројект

Промените у директоријум фласкпројецт следећу наредбу

цд фласкпројецт

Унутар директоријума фласкпројецт-а користите алат виртуаленв да креирате виртуелно окружење као што је приказано у наставку:

виртуаленв фласкапи

Након што сте помоћу виртуаленв алата направили виртуелно окружење, покрените цд команду да бисте је променили у директориј фласкапи као виртуелно окружење и активирајте је помоћу команде испод.

изворни канти / активирати

Извршите све задатке везане за овај пројекат у виртуелном окружењу.

Инсталирајте пакете помоћу пип-а

Сада је време да инсталирате пакете као што су флак оквир и ПиЈВТ који ћемо користити за изградњу осталог АПИ-ја и других потребних пакета за наш АПИ пројекат.

Направите датотеку захтеве.ткт са следећим пакетима.

Фласк
Датум време
ууид
Фласк-СКЛАлцхеми
ПиЈВТ

Инсталирајте их помоћу пип-а.

пип инсталл -р захтеве.ткт

Постављање базе података

Инсталирајмо СКЛите.

апт-гет инсталл склите3

Креирајте базу података која се зове библиотека. Унутар ове базе података креираћемо две табеле, односно табелу корисника и аутора.

Табела корисника садржи регистроване кориснике. Само регистровани корисници могу имати приступ табели аутора.

Ауторска табела чува податке аутора или детаље као што су име аутора, земља рођења и тако даље које достављају регистровани корисници.

Креирајте базу помоћу следеће наредбе:

склите3 либрари.дб

Можете проверити да ли сте успешно креирали базу помоћу команде у наставку:

.базе података

Отворите нови терминал и извршите следеће у виртуелном окружењу које смо креирали раније.

додирните апп.пи

Налепите следећи код у датотеку названу апп.пи

из увоза тиквице Флашка, захтев, јсонифи, маке_респонсе
фром фласк_склалцхеми импорт СКЛАлцхеми
фром веркзеуг.сецурити импорт цреате_пассворд_хасх, цхецк_пассворд_хасх
импорт ууид
импорт јвт
импорт датетиме
из увозних омота за функтоолс

Први ред у коду изнад увози пакете као што су захтјев и јсонифи. Искористићемо захтев да пратимо податке на нивоу захтева током захтева и користићемо јсонифи за излазне одговоре у ЈСОН формат.

У следећем реду смо увели СКЛАлцхеми из фласк_склалцхеми да бисмо интегрисали СКЛАлцхеми функције у тиквицу.

Из веркзеуг.сецурити, увели смо генератор_пассворд_хасх да бисмо генерисали хасх лозинку за кориснике и цхецк_пассворд_хасх да бисмо проверили корисничку лозинку када упоређујемо лозинку коју су поднели корисници са лозинкама корисника сачуваних у бази података.

Коначно, увезли смо ууид такође познат као универзални јединствени идентификатори за генерисање случајних ИД бројева за кориснике.

Ипак, унутар датотеке апп.пи имплементирајте конфигурациона подешавања АПИ-ја библиотеке користећи код испод у датотеци апп.пи.

Ставите следећи код испод изјаве о увозу.

апп = Фласк (__ наме__)

апп.цонфиг [‘СЕЦРЕТ_КЕИ’] = ‘Тх1с1сс3цр3т’
апп.цонфиг [‘СКЛАЛЦХЕМИ_ДАТАБАСЕ_УРИ’] = ‘склите: /////хоме/мицхаел/геекдемос/геекапп/либрари.дб’
апп.цонфиг [‘СКЛАЛЦХЕМИ_ТРАЦК_МОДИФИЦАТИОНС’] = Тачно

дб = СКЛАлцхеми (апликација)

Сада направите два модела за табелу корисника и аутора као што је приказано у наставку. Копирајте и залепите код унутар датотеке апп.пи.

Поставите код доле одмах испод ове базе података дб = СКЛАлцхеми (апликација)

Корисници класе (дб.Модел):
ид = дб.колона (дб.Интегер, Примари_кеи = Тачно)
публиц_ид = дб.колона (дб.Интегер)
име = дб.колона (дб.Стринг (50))
лозинка = дб.колона (дб.Стринг (50))
админ = дб.Цолумн (дб.Боолеан)
Аутори класе (дб.Модел):
ид = дб.колона (дб.Интегер, Примари_кеи = Тачно)
наме = дб.Цолумн (дб.Стринг (50), јединствено = Труе, нуллабле = Фалсе))
боок = дб.Цолумн (дб.Стринг (20), јединствен = Труе, нуллабле = Фалсе))
држава = дб.колона (дб.Стринг (50), нуллабле = нетачно))
боокер_призе = дб.Цолумн (дб.Боолеан)

Генерисање табела корисника и аутора

На терминалу упишите сљедећи код унутар виртуалног окружења како бисте генерирали или створили таблице за таблице корисника и аутора као што је приказано у наставку

фром импорт апп дб
дб.цреате_алл ()

Након тога отворите апп.пи датотеку унутар виртуалног окружења и направите другу функцију.

Ова функција ће генерисати токене како би само регистрованим корисницима омогућила приступ и извршавање скупа АПИ операција у табели Аутори.

Поставите овај код испод модела базе података у Таблица аутора

деф токен_рекуиред (ф):
@врапс (ф)
деф децоратор (* аргс, ** кваргс):

токен = Нема

ако је ‘к-аццесс-токенс’ у рекуест.хеадерс:
токен = рекуест.хеадерс [‘к-приступ-токени’]

ако не знак:
ретурн јсонифи ({‘мессаге’: ‘валидан токен недостаје’})

покушати:
дата = јвт.децоде (токен, апп.цонфиг [СЕЦРЕТ_КЕИ])
цуррент_усер = Усерс.куери.филтер_би (публиц_ид = подаци [‘публиц_ид’]). први ()
осим:
ретурн јсонифи ({‘мессаге’: ‘токен је неваљан’})

ретурн ф (тренутни_усер, * аргс, ** кваргс)
повратак декоратор

Креирајте руте за табелу корисника

Сада креирајмо руту да бисмо омогућили корисницима да се региструју за Аутори АПИ путем корисничког имена и лозинке као што је приказано у наставку.

Опет отворите апп.пи датотеку унутар виртуелног окружења и залепите следећи код испод функције токен_рекуиред (ф)

@ апп.роуте (‘/ региструј се, методе = [‘ ГЕТ ‘,’ ПОСТ ‘])
деф сигнуп_усер ():
дата = рекуест.гет_јсон ()

хасхед_пассворд = генератор_пассворд_хасх (подаци [‘лозинка’], метода = ‘сха256’)

нев_усер = Корисници (публиц_ид = стр (ууид.ууид4 ()), наме = дата [‘наме’], пассворд = хасхед_пассворд, админ = Фалсе)
дб.сессион.адд (нев_усер)
дб.сессион.цоммит ()

ретурн јсонифи ({‘мессаге’: ‘успешно регистрован’})

Унутар виртуелног окружења креирајте другу руту у апликацији апп.пи како бисте регистрованим корисницима омогућили да се пријаве.

Када се корисник пријави, генерира се случајни токен за корисника за приступ АПИ-ју библиотеке.

Залепите код испод испод претходне руте коју смо креирали.

@ апп.роуте (‘/ пријава’, методе = [‘ГЕТ’, ‘ПОСТ’])
деф логин_усер ():

аутх = рекуест.ауторизација

ако не аутх или не аутх.усернаме или не аутх.пассворд:
ретурн маке_респонсе (‘није успео проверити’, 401, {‘ВВВ.Аутхентицатион’: ‘Основна област: "захтева се пријава"’})

усер = Усерс.куери.филтер_би (наме = аутх.усернаме) .фирст ()

ако цхецк_пассворд_хасх (усер.пассворд, аутх.пассворд):
токен = јвт.енцоде ({‘публиц_ид’: усер.публиц_ид, ‘екп’: датетиме.датетиме.утцнов () + датетиме.тимеделта (минуте = 30)}, апп.цонфиг [‘СЕЦРЕТ_КЕИ’])
ретурн јсонифи ({‘токен’: токен.децоде (‘УТФ-8’)})

ретурн маке_респонсе (‘није успео проверити’, 401, {‘ВВВ.Аутхентицатион’: ‘Основна област: "захтева се пријава"’})

Ипак, у виртуелном окружењу креирајте другу руту у апликацији апп.пи да бисте добили или преузели све регистроване кориснике.

Овај код проверава све регистроване кориснике у табели корисника и враћа коначни резултат у ЈСОН формату.

Залепите код испод испод руте за пријаву

@ апп.роуте (‘/ корисници’, методе = [‘ГЕТ’])
деф гет_алл_усерс ():

усерс = Усерс.куери.алл ()

резултат = []

за корисника у корисницима:
усер_дата = {}
усер_дата [‘публиц_ид’] = корисник.публиц_ид
усер_дата [‘наме’] = корисничко име
усер_дата [‘лозинка’] = усер.пассворд
усер_дата [‘админ’] = усер.админ

ресулт.аппенд (усер_дата)

ретурн јсонифи ({‘корисници’: резултат})

Креирајте руте за табелу аутора 

Креирајмо руте за Таблу аутора да бисмо омогућили корисницима да преузму све ауторе у бази података, као и да обришу ауторе.

Само корисници са важећим токенима могу обављати ове АПИ операције.

Унутар апп.пи датотеке направите руту за регистроване кориснике да би креирали нове ауторе.

Залепите овај код испод руте која омогућава кориснику да преузме све регистроване кориснике.

@ апп.роуте (‘/ аутор’, методе = [‘ПОСТ’, ‘ГЕТ’])
@токен_рекуиред
деф цреате_аутхор (цуррент_усер):

дата = рекуест.гет_јсон ()

нев_аутхорс = Аутори (име = подаци [‘име’], држава = подаци [‘држава’], књига = подаци [‘књига’], боокер_призе = Тачно, усер_ид = тренутни_уживот.ид)
дб.сессион.адд (нев_аутхорс)
дб.сессион.цоммит ()

ретурн јсонифи ({‘мессаге’: ‘нови аутор створен’})

Затим креирајте другу руту како бисте омогућили регистрованом кориснику са важећим токеном да преузме све ауторе у табели Аутори као што је приказано у наставку.

Залепите овај код испод руте која омогућава кориснику да створи новог аутора.

@ апп.роуте (‘/ аутори’, методе = [‘ПОСТ’, ‘ГЕТ’])
@токен_рекуиред
деф гет_аутхорс (цуррент_усер):

аутори = Аутхорс.куери.филтер_би (усер_ид = цуррент_усер.ид) .алл ()

оутпут = []
за аутора у ауторима:

аутхор_дата = {}
аутхор_дата [‘име’] = име аутора
аутхор_дата [‘књига’] = аутор.боок
аутхор_дата [‘држава’] = аутор.број
аутхор_дата [‘боокер_призе’] = аутор.боокер_призе
оутпут.аппенд (аутхор_дата)

ретурн јсонифи ({‘лист_оф_аутхорс’: излаз})

На крају, још увек у апликацијској датотеци креирајте руту за брисање одређеног аутора као што је приказано у наставку.

Залијепите овај код испод руте која омогућава кориснику да преузме списак аутора.

@ апп.роуте (‘/ аутори /’, методе = [‘ДЕЛЕТЕ’])
@токен_рекуиред
деф делете_аутхор (тренутни_усер, аутор_ид):
аутхор = Аутор.куери.филтер_би (ид = аутхор_ид, усер_ид = цуррент_усер.ид) .фирст ()
ако није аутор:
ретурн јсонифи ({‘мессаге’: ‘аутор не постоји’})

дб.сессион.делете (аутор)
дб.сессион.цоммит ()

ретурн јсонифи ({‘мессаге’: ‘Аутор је избрисан’})

ако је __наме__ == ‘__маин__’:
апп.рун (дебуг = Труе)

Након тога сачувајте и затворите апп.пи датотеку унутар виртуалног окружења.

Тестирање АПИ-ја библиотеке са Постманом

У овом одељку користићемо поштар алат да пошаљемо захтев услугама базе података. Ако на поштанској машини немате поштара, можете сазнати како да је преузмете и инсталирате овде.

Осим поштара, можемо користити и друге алате као што су Цурл за слање захтева на сервер.

Отворите нови терминал и откуцајте следеће:

поштар

Командни поштар узроковаће да ваш веб прегледач прикаже доњу страницу:

постман_сигнуп

Можете да се одлучите да се пријавите и отворите бесплатан налог, али ми ћемо прескочити и добити директан приступ апликацији да бисмо тестирали АПИ библиотеке као што је приказано у наставку:

Тестирајте библиотеку апи

У овом одељку ћемо омогућити кориснику да се региструје за библиотечки АПИ пружањем корисничког имена и јединствене лозинке у ЈСОН формату помоћу ПОСТ методе помоћу следећих корака:

  • Кликните на картицу под називом Боди
  • Затим изаберите неограничено дугме и изаберите ЈСОН формат
  • унесите корисничко име и лозинку за регистрацију као што је приказано на слици
  • Поред дугмета за слање унесите следећи УРЛ хттп://127.0.0.1/регистер
  • На крају, промените методу у ПОСТ и притисните дугме за слање.

корисник се региструје за апи

Приказаће се следећи излаз као што је приказано у наставку:

Сада смо успешно регистровали корисника. Хајде да омогућимо кориснику који се управо регистровао да се пријави како би генерисао привремени случајни токен да приступи табели аутора помоћу следећих корака:

  •  Кликните на картицу за ауторизацију.
  • У одјељку типа одаберите основну провјеру идентитета.
  • Затим попуните образац за корисничко име и лозинку корисничким именом и лозинком за које сте се претходно регистровали.
  • На крају, притисните дугме за слање да бисте се пријавили и генерисали случајни токен.

Једном када се корисник успешно пријави, за њега се генерише случајни токен као што је приказано на слици.

Искористићемо генерисани случајни токен за приступ табели аутора.

У овом одељку додаћемо податке о аутору у табелу аутора путем ПОСТ методе следећим корацима:

  • Кликните картицу заглавља
  • Укључите следеће ХТТП заглавља приказана на снимку заслона

  • Затим кликните на картицу тијела и унесите детаље о новом аутору
  • Затим притисните дугме за слање да бисте додали детаље аутора у Ауторску табелу

Подаци аутора можете такође потражити у табели Аутори преко следећег:

  • Провјерите је ли генерирани токен у одјељку заглавља. ако је нема, требате да је испуните својим токеном.
  • Поред дугмета за слање унесите овај УРЛ хттп://127.0.0.1/аутхорс
  • Затим промените ХТТП метод у ГЕТ и притисните дугме за слање да бисте преузели детаље о ауторима.

Коначно, можете избрисати аутора (е) у табели Аутори (ДЕЛЕТЕ) методом ДЕЛЕТЕ следећим корацима:

  • Провјерите је ли ваш токен још увијек у одјељку заглавља. Можете провјерити картицу заглавља да бисте провјерили да ли су потребне информације.
  • Поред дугмета за слање унесите овај УРЛ хттп://127.0.0.1/сам
  • Затим притисните дугме за слање да бисте обрисали корисника којег сте навели.

Комплетни изворни код можете пронаћи на Гитхуб.  Можете га клонирати и проверити на свом рачунару.

ОЗНАКЕ:

  • Питхон

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map