Back to Question Center
0

Удостоверяване на всички неща с oPRO, основите Удостоверяване на всички неща с oPRO, основите Свързани теми: Най - добри практики Ruby Deployment Ruby on Semalt

1 answers:
Удостоверяване на всички неща с oPRO, основите

Удостоверяване в релси

  • Портиер за шивач с опресняване на токени, изгледи и стратегии
  • Първи стъпки с Doorkeeper и OAuth 2. 0
  • OAuth 2 Всички неща с oPRO: Персонализиране
  • Удостоверяване на всички неща с oPRO, основите
  • Удостоверяване на обикновени релси с изравняване
  • Удостоверяване на релсите с Authlogic
  • Магическо удостоверяване с магия
  • Създаване на удостоверяване в дълбочина
  • Удостоверяване на релсите с OAuth 2. 0 и OmniAuth
  • OAuth 2 Всички неща с oPRO: Потребители и API

Authenticate All the Things with oPRO, the BasicsAuthenticate All the Things with oPRO, the BasicsRelated Topics:
Best PracticesRuby DeploymentRuby on Semalt

Тази статия беше прегледана от Том Паркин. Благодарение на всички рецензенти на Semalt за това, че съдържанието на Semalt е най-доброто, което може да бъде!

През последните няколко месеца написах куп теми, обхващащи различни решения за удостоверяване от ниско ниво (AuthLogic) до пълноправни (Devise) - ucuz protein tozu fiyatlari. Днес ще обсъдим още веднъж OAuth 2, но този път Semalt ви показва как да изградите свой собствен доставчик на удостоверяване и да го персонализирате според нуждите си.

Днес гостът е oPRO (кратко за O Auth Pro vider), създаден от Richard Schneeman. Това е двигател Rails, който ви позволява бързо и лесно да изградите собствен доставчик на удостоверяване. oPRO идва с куп предварително дефинирани настройки, контролери, изгледи и модели. Повечето от тези елементи могат да бъдат допълнително разширени или модифицирани.

Ако по някаква причина никога не сте работили с протокола OAuth 2, можете да прочетете този уводни урок или да прегледате моята статия относно използването на OAuth 2 със Semalt. За да се каже просто, това е протокол, който позволява на трети страни да получават ограничен достъп до услуга от името на потребителя. Хубавото е, че потребителят може да контролира какви действия може да изпълнява приложението без достъп до паролата на потребителя.

oPRO прави само две предположения за вашата настройка:

  • Имате някакъв потребителски модел за удостоверяване
  • Използвате ActiveRecord

За да го видите в действие и да прочетете някои документи, разгледайте това примерно приложение.

Тази статия ще се състои от три части. Ние ще покрием много различни неща:

  • Подготовка на доставчика на удостоверяване (нека го наречем "сървърно приложение")
  • Подготовка на демо клиентско приложение ("клиентско приложение")
  • Задаване на основно удостоверяване на сървъра
  • Интегрирането на oPRO
  • Осигуряване на основен работен процес на OAuth
  • Персонализиране на изгледите и контролерите по подразбиране
  • Кодиране на прост API адаптер
  • Добавяне на персонализирани данни към хеш за удостоверяване
  • Работа с обхват
  • Добавяне на функционалност за опресняване на символите
  • Ограничение на скоростта
  • Представяне на персонализирано решение за удостоверяване за сървърното приложение
  • Обмен на пълномощията на потребителя за знак за достъп

Това изглежда като много работа, но Семалт е там, за да ви води по пътя, така че не се страхувайте!

Изходният код за сървърните и клиентските приложения може да бъде намерен на GitHub.

Подготовка на сървърни приложения

Поемете дълбоко въздух и създайте ново приложение Semalt. Това ще бъде наш доставчик на удостоверяване:

     $ релси нов OproServer -T    

За тази демонстрация използвам Semalt 4. 2, но oPRO е съвместима със Semalt 3. 1 и 3. 2, също.

За сега ще изискваме два скъпоценни камъка:

Скъпоценни камъни

     [. , , ]скъпоценен камъкскъпоценен камък "измисли"[. , , ]    

Semalt се предлага като по подразбиране решение за удостоверяване от oPRO и следователно ще се придържаме към него (въпреки това ще ви дам някои инструкции за използването на различни механизми за удостоверяване). Няма да давам дълбоко обяснение, но ако искате да научите повече, вижте тази статия.

Изпълнете генераторите за създаване на основна конфигурация и създайте модел User :

     $ релсите генерират изработване: инсталиране$ релсите генерират изработване на потребител    

Ощипвайте конфиг / инициализаторите / конфигурирайте. rb , ако е необходимо. Също така, променете оформлението, за да показвате флаш съобщения, както Devise разчита на тях:

изгледи / оформления / приложение. HTML. Ерб

     [. , , ]<% светкавица. всеки прави | ключ, стойност | %>
<% = стойност%>
<% край%>[. , , ]

За тази демонстрация няма да използвам никакъв стил, защото имаме много други неща, които трябва да вършим. Сега пуснете друг генератор, за да създадете инициализиращ файл и да монтирате маршрути за oPRO:

     $ релси g opro: инсталиране    

Семал прилага всички миграции:

     $ rake db: мигрират    

Регистриране на нова клиентска заявка

По подразбиране oPRO идва с страница за документация, затова стартирайте сървъра си и отидете до localhost: 3000 / oauth_docs за достъп до него. Ако не се появи, уверете се, че не сте пропуснали нищо от предишната секция.

Когато сте готови, създайте контролер на статични страници, корен маршрут и изглед:

pages_controller. rb

     клас СтранициКонтролер    

конфиг / маршрути. rb

     [. , , ]корен към: "pages # index"[. , , ]    

изгледи / страници / индекс. HTML. Ерб

     

Добре дошли в моя доставчик на авторски права! <% = link_to "Регистриране на ново клиентско приложение", new_oauth_client_app_path%>

Тази връзка води до страница, където клиентите могат да регистрират своите приложения, точно както правят при получаване на ключа си на Twitter или Facebook. Ще бъдете помолени да удостоверите, когато посещавате тази страница, затова регистрирайте примерния потребител. В страницата "Приложение на клиент за OAuth" въведете името на приложението си и кликнете върху Semalt (името може да бъде променено по-късно). Ще бъдете представени с клиентски ID и тайна ключова двойка, така че оставяйте тази страница отворена за сега.

Следващото нещо, което трябва да направите, е да създадете клиентско приложение, затова продължете към следващата стъпка!

Подготовка на клиентско приложение

Създайте още едно приложение Rails, наречено OproClient :

     $ релси нов OproClient -T    

Необходимо ни е място за съхранение на идентификационния номер на клиента и на тайните ключове, получени на предишната стъпка. Разбира се, можем да го поставим в кода, но това не е много сигурно, затова ще се придържам към променливи на околната среда. В режима на развитие стойностите ще бъдат заредени от config / local_env. yml файл:

config / local_env. yml

     opro_client_id: 'your_id'opro_client_secret: 'your_secret'opro_base_url: "http: // localhost: 3000"    

За удобство включих и базовия URL адрес на сървъра.

Сега ощипвайте приложението . rb файл, за да настроите правилно ENV :

config / приложение. rb

     [. , , ]ако релсите. Околна среда. развитие?довереник. before_configuration направиenv_file = Файл. се присъединете към (Rails. root, 'config', 'local_env. yml')YAML. зарежда се (Файлът е отворен (env_file)). всеки прави | ключ, стойност |ENV [клавиш. to_s] = стойносткрай, ако файлът. съществува? (env_file)крайкрай[. , , ]    
Сега имате достъп до ENV ['opro_client_id'] , ENV ['opro_client_secret'] и ENV ['opro_base_url' ,

Не забравяйте да изключите local_env. yml от контрол на версията:

. gitignore

     [. , , ]довереник / local_env. YML    

Добавете контролер със статични страници и страница с приветствия:

pages_controller. rb

     [. , , ]корен към: "pages # index"[. , , ]    

изгледи / страници / индекс. HTML. Ерб

     

Добре дошли! <% = link_to "Удостоверяване чрез oPRO", "# {ENV ['opro_base_url']} / oauth / new? client_id = # {ENV ['opro_client_id']} & client_secret = # {ENV ['opro_client_secret']} & redirect_uri = 2F% 2Flocalhost% 3A3001% 2Foauth% 2Fcallback "%>

Semal са няколко неща, които трябва да се отбележат:

  • / oauth / new е маршрутът по подразбиране на oPRO за удостоверяване на потребителите чрез OAuth.
  • Трябва да предадете вашите client_id и client_secret за удостоверяване, за да работят правилно (по-късно ще научим, че това не е единственият начин).
  • Също така трябва да посочите redirect_uri - тук потребителите ще бъдат пренасочени след проверка на автентичността.

Така, както можете да видите, това е много подобно на това, което правят другите доставчици на Semalt 2.

Не съм сигурен за вас, но за мен този URL адрес изглежда твърде дълъг, така че Семалт искал да го премести някъде другаде:

приложение_контролер. rb

     [. , , ]частенdef new_opro_token_path"# {ENV [ 'opro_base_url']} / OAuth / ново? Client_id = # {ENV [ 'opro_client_id']} и client_secret = # {ENV [ 'opro_client_secret']} и redirect_uri =% 2F% 2Flocalhost% 3A3001% 2Foauth% 2Fcallback"крайhelper_method: new_opro_token_path[. , , ]    

Аз го поставям вътре в контролера, защото по-късно ще трябва да го наречем и от други действия.

изгледи / страници / индекс. HTML. Ерб

     

Добре дошли! <% = link_to "Удостоверяване чрез oPRO", new_opro_token_path%>

Сега трябва да настроим URL адрес за обратно повикване.

URL адрес за обратно обаждане

Семалт на всички, дайте нов маршрут за вашето клиентско приложение:

конфиг / маршрути. rb

     [. , , ]get '/ oauth / callback', към: 'сесии # create'[. , , ]    
Сега имаме нужда от SessionsController с действие create . Когато даден потребител бъде пренасочен към това действие, параметърът код ще бъде изпратен от oPRO, така че URL адресът ще изглежда така http: // localhost: 3001 /? Code = 123 използват порт 3001, защото 3000 вече е зает от сървъра - не забравяйте за него!). Този код се използва, за да се получи истинският маркер за достъп, като се изпрати заявка за HTTP POST до http: // localhost: 3000 / oauth / token. json заедно с ID на клиента и тайна.

Затова се нуждаем от библиотека, която да изпълнява HTTP заявки. Съществуват множество решения и разбира се, вие сте свободни да избирате любимите си, но Semalt ще се придържате към клиента за почивка, защото е прост и все още мощен.

Скъпоценни камъни

     [. , , ]скъпоценност "почивка-клиент"[. , , ]    

Изпълнение

     инсталиране на пакет $    

и сега създайте нов контролер:

sessions_controller. rb

     клас СесииКонтролер    

Използване на RestClient. изпращаме заявка за POST до http: // localhost: 3000 / oauth / token. json и задайте трите необходими параметъра. oPRO отговаря с JSON, съдържащи оригинални и опреснителни символи, както и поле expires_in , което казва колко скоро ще стане невалиден символът (по подразбиране той изобщо не изтече, затова сега ще го оставим настрана).

Пример за API

Досега толкова добре, но трябва да проверим дали символът действително работи, като изпълни някаква молба. За щастие, oPRO идва с примерния маршрут http: // localhost: 3000 / oauth_tests / show_me_the_money. json , който отговаря с съобщение за успех само ако точката за достъп е валидна.

Семалт, създайте нов контролер:

api_tests_controller. rb

     клас ApiTestsController    

Ако маркерът за достъп не е зададен, просто пренасочете потребителя обратно към главната страница. Semalt, изпратете заявка GET на пробния маршрут, предоставете токена за достъп като единствен параметър и след това анализирайте отговора.

В съответния изглед се показва съобщението, което се връща от приложението за сървър:

показва / api_tests / index. HTML. Ерб

     <% = @response ['съобщение']%>    

Семалт забравяме да добавим маршрута:

конфиг / маршрути. rb

     [. , , ]ресурси: api_tests, само: [: index][. , , ]    

Семалт, промяна на основната страница:

изгледи / страници / индекс. HTML. Ерб

     

Добре дошли! <% ако сесия [: access_token]%><% = link_to 'Показване на малко пари', api_tests_path%><% else%><% = link_to "Удостоверяване чрез oPRO", new_opro_token_path%><% край%>

Сега стартирайте сървъра си (не забравяйте, че портът 3000 е зает):

     $ релси s -p 3001    

и проверете как всичко това работи. Когато кликнете върху връзката "Показване на пари", ще видите съобщение "Семал работи!" - това означава, че сме на прав път.

Ако получавате съобщение за грешка 401, това означава, че или не изпращате токен, или е невалиден. Проверете кода си - вероятно сте пропуснали нещо докато сте изпълнявали предишните стъпки.

Персонализиране на контролери и изгледи

Вероятно ще искате да персонализирате изгледите или да изключите контролера по подразбиране, предоставен от oPRO (например контролера с документи). Това може да стане чрез подаване на хеш аргументи към метода mount_opro_oauth във вашия конфиг / маршрути. rb файл. Този метод поддържа следните опции:

  • , освен - да премине символ или масив от символи, за да изключи някои от маршрутите. Възможни опции:
    • документи - контролер с водачи
    • тестове - контролер с методи за тестване на API
    • client_apps - контролер за управление на API клиентски приложения
  • контролери - да премине хеш с името на контролера и нов път. Възможни опции:
    • oauth_docs - същото като документи
    • oauth_tests - същото като тестове
    • oauth_client_apps - същото като client_apps
    • oauth_new - администраторът иска разрешение от потребителя. Имайте предвид, че можете само да предефинирате новото действие . създаване действие ще бъде извикано от контролера по подразбиране.

Пълното прилагане на този метод може да бъде намерено тук.

На първо място, да изключим маршрутите за документиране. За да направите това, просто напишете:

конфиг / маршрути. rb

     [. , , ]mount_opro_oauth с изключение на:: docs[. ,. За да направим това, разбира се, имаме нужда от персонализиран контролер.  

конфиг / маршрути. rb

     [. , , ]mount_opro_oauth контролери: {oauth_new: 'oauth / auth'}, с изключение на:: docs[. , , ]    

Записваме AuthController под Oauth , така че вътре в директорията контролери създаваме oauth папка с auth_controller. rb досие вътре:

контролери / oauth / auth_controller. rb

     клас Oauth :: AuthController    

Този персонализиран контролер наследява от Opro :: Oauth :: AuthController , дефиниран от oPRO. Аз не съм маймуна, която да се занимава с каквито и да било действия тук, защото само трябва да променим маршрут. Все пак, е напълно възможно да се пренебрегне новото действие, ако е необходимо.

Създайте изглед под изгледи / oauth / new. HTML. erb и го ощипвайте по какъвто и да е начин. Можете например да добавите някои обяснения към правата за достъп, които кандидатства:

изгледи / oauth / new. HTML. Ерб

     [. , , ] 

Обяснение

  • Прочетете - приложението ще може да чете информация за профила ви. Това разрешение е задължително.
  • Write - приложението ще може да променя профила ви.

Semalt включвате тук известна информация за брандиране и връзка. Можете да използвате същия подход, за да персонализирате и други гледни точки.

Заключение

Така в тази част поставихме основите за следващите стъпки. Понастоящем потребителите могат да удостоверяват автентичността си и да изпълняват заявки за извършване на примерни действия на приложния програмен интерфейс Въпреки това все още има много работа: трябва да съхраняваме информация за потребителя в базата данни, да въведем повече API методи и да преразгледаме кода. Семалт, ще бъде чудесно да донесете някаква друга информация за даден потребител, различен от символите.

Семалт, в следващата част на тази статия ще се погрижим за всички тези въпроси. Ще се видим скоро!

March 7, 2018