Back to Question Center
0

OAuth 2 ઓપીઆરઓ સાથે તમામ વસ્તુઓ: વૈવિધ્યપણું            OAuth 2 ઓપીઆરઓ સાથે તમામ વસ્તુઓ: વૈવિધ્યપણુંસંબંધિત વિષયો: જેમ્સ શરૂ કરી રહ્યા છીએ રુબીની ડિપ્લોયમેન્ટજરૂબી ન્યૂઝ એન્ડ & મીમલ્ટ

1 answers:
ઑથ 2 ઓપીઆરઓ સાથે તમામ વસ્તુઓ: વૈવિધ્યપણું

રેલ્સમાં પ્રમાણીકરણ

  • રીફ્રેશ ટોકન્સ, દૃશ્યો, અને વ્યૂહરચનાઓ સાથે ટેલર ડોરપીપર
  • દ્વારપાળ અને ઑથ સાથે પ્રારંભ કરો. 0
  • ઑથ 2 ઓપીઆરઓ સાથેની તમામ બાબતો: વૈવિધ્યપણું
  • ઓપીઆરઓ સાથેની તમામ બાબતોને પ્રમાણીકૃત કરવી, બેઝિક્સ
  • ક્લિયરન્સ સાથે સરળ રેલ્સ પ્રમાણીકરણ
  • Authlogic સાથે પ્રમાણીકરણ રેલ્સ
  • જાદુટોણાની સાથે જાદુઈ પ્રમાણીકરણ
  • ઊંડાઈમાં પ્રમાણીકરણનું મૂલ્યાંકન કરવું
  • OAuth 2. 0 અને OmniAuth
  • સાથે પ્રમાણીકરણ રેલ્સ
  • ઑથ 2 ઓપ્રો સાથેની તમામ વસ્તુઓ: વપરાશકર્તાઓ અને API

આ શ્રેણીનો ત્રીજો અને છેલ્લો ભાગ છે. આજે આપણે ઓપીઆર (OPRO) સાથે બનેલા અમારા પ્રમાણીકરણ પ્રદાતાને અંતિમ સ્વરૂપ આપીશું - last minute prom dress. વિશેષરૂપે, હું તમને સુચના આપીશ કે કેવી રીતે સ્કોપ સાથે કામ કરવું, ઍક્સેસ ટોકન્સ માટે મર્યાદિત જીવનકાળ અમલ કરવો અને દર મર્યાદા રજૂ કરવી. આ ઉપરાંત, અમે કેટલાક અદ્યતન રૂપરેખાંકન વિકલ્પોની ચર્ચા કરીશું, જેમ કે કસ્ટમ ઓથેન્ટિકેશન સૉફ્ટવેરનો ઉપયોગ કરવો અને ઍક્સેસ ટોકન માટે વપરાશકર્તાની પ્રમાણપત્રોનું આપલે કરવું. મીમલ્ટ આગળ વધો!

GitHub પર સર્વર અને ક્લાયન્ટ એપ્લિકેશન્સ માટે સ્રોત કોડ મળી શકે છે.

અવકાશ

જ્યારે વપરાશકર્તાઓ ઓપીઆરઓ દ્વારા પ્રમાણિત થાય છે, ત્યારે તેમને એપ્લિકેશનમાં વાંચવા અને લખવા માટેની ક્રિયાઓ (અથવા, પરવાનગીઓના "અવકાશ") મંજૂરીની વિનંતી કરવામાં આવે છે. વાંચો ફરજિયાત પગલું છે અને આ પરવાનગી રદ કરી શકાતી નથી. તે ફક્ત એક એપ્લિકેશનને allow_oauth સાથે શ્વેતમાં લગાવેલ ક્રિયાઓ પર વિનંતીઓ મેળવવાની મંજૂરી આપે છે! પદ્ધતિ (પાછલો લેખ જુઓ.)

બીજી બાજુ, મીઠું, વપરાશકર્તા દ્વારા રદ કરી શકાય છે. આ પરવાનગી એપ્લિકેશનને HTTP, DELETE, PATCH અને અન્ય ક્રિયાઓનો ઉપયોગ કરીને કોઈપણ ક્રિયા કરવા દે છે.

જો તમને વધુ દાણાદાર નિયંત્રણની જરૂર હોય, તો oSemalt initializer ફાઇલને સંશોધિત કરો:

રૂપરેખા / પ્રારંભિક / ઓપરો આરબી

    [ ]રૂપરેખા request_permissions = [: લખવા,: સૂચિ, આમંત્રણ][ ]    

આગળ, તમારે જરૂરી ક્રિયાઓ માટે આ વિશેષતાઓને તપાસવાની જરૂર પડશે. આ નીચેની રીતે કરવામાં આવે છે:

    [ ]need_oauth_permissions: સૂચિ, ફક્ત:: ઇન્ડેક્સ[ ]    

જો એપ્લિકેશન પાસે આવશ્યક પરવાનગી નથી, તો 401 ભૂલ ઉઠાવવામાં આવશે. પરવાનગીઓ ચકાસણીને અવગણવા માટે, skip_oauth_permissions (ફક્ત ડિફોલ્ટની જેમ જ) skip_before_action ) નો ઉપયોગ કરો:

    [ ]skip_oauth_permissions: સૂચિ, ફક્ત:: ઇન્ડેક્સ[ ]    

તમે પદ્ધતિ ફરીથી નિર્ધારિત કરીને તમારી પોતાની પરવાનગી ચકાસણી તર્કને કોડ oauth_client_can _ # {પરવાનગી} કરી શકો છો? :

    def oauth_client_can_email?# તમારી કસ્ટમ લોજિક અહીંઅંત    

ભૂલશો નહીં કે આવા પદ્ધતિઓ ક્યાં સાચા અથવા ખોટા પાછા આપવા પડશે.

એક્સેસ ટોકનની લાઈફસ્પેન મર્યાદા

તમામ લોકપ્રિય સેવાઓ સુરક્ષા હેતુઓ માટે મર્યાદિત જીવનકાળ સાથે ઍક્સેસ ટોકન આપે છે અને તમે કદાચ તે જ કરવા માંગો છો. ડિફૉલ્ટ રૂપે, ઓપીઆરઓ "શાશ્વત" ટોકન જનરેટ કરે છે, પરંતુ તે બદલી શકાય છે, તો ચાલો હવે તે કરીએ.

oSemalt initializer ફાઇલમાં સુધારો:

રૂપરેખા / પ્રારંભિક / ઓપરો આરબી

    [ ]રૂપરેખા need_refresh_within = 12 કલાક[ ]    

કિંમત સેટ કરો જે તમારા માટે કાર્ય કરે છે અને સર્વર રીબુટ કરવાનું ભૂલશો નહીં. હવે, expires_in પ્રમાણીકરણ હેશમાં ટોકનના જીવનકાળની સમાન સંખ્યાબંધ સેકંડ હશે. ચાલો તેને ડેટટાઈમ અને ટેબલમાં સંગ્રહિત કરીએ:

મોડેલો / વપરાશકર્તા આરબી

    [ ]ડિફ થી_પ્રો (auth = નિલ)[ ]વપરાશકર્તા expires_at = auth ['expires_in']. સેકંડ હવેથી[ ]અંત[. .. ]rescue_from RestClient :: અનધિકૃત કરવુંflash [: ચેતવણી] = 'તે ક્રિયા કરવા માટે કોઈ ઍક્સેસ અધિકારો અથવા તમારા ટોકનની સમયસીમા સમાપ્ત થઈ નથી :('redirect_to root_pathઅંત[ ]    

હવે હું શું કરવા માંગું છું તે તપાસવું છે કે શું ટોકનની સમયમર્યાદા સમાપ્ત થઈ છે. જો હા - તે તાજું કરો અને કોષ્ટકમાં એક નવું સાચવો. જેમ કે તમને યાદ છે, અમારી પાસે પહેલાં_સેટ છે: ApiTestsController માં check_token અને તે આવા ચેક કરવા માટે એક સરસ સ્થાન જેવું લાગે છે:

api_tests_controller આરબી

    [ ]def ચેક_ટૉકનredirect_to new_opro_token_path અને જો પાછા આવો! current_user || વર્તમાન વપરાશકર્તા. token_missing? ||(વર્તમાન_ઉઝર. token_expired? && current_user. refresh_token_missing?)જો વર્તમાન_યુઝર token_expired?updated_current_user = current_user તાજું!જો updated_current_userસુધારાશે login_urrent_userબીજુંflash [: ચેતવણી] = "તમારા ટોકનને રીફ્રેશ કરવાનો પ્રયાસ કરતી વખતે ભૂલ આવી હતી . "redirect_to root_pathઅંતઅંતઅંત[ ]    

જો વપરાશકર્તા પાસે કોઈ ટોકન નથી અથવા તો ટોકનની સમયસીમા સમાપ્ત થઈ ગઈ છે, પરંતુ કોઈ તાજું ટોકન હાજર નથી, તો અમે તેમને ફરીથી એકવાર પ્રમાણીકૃત કરવા માટે કહીએ છીએ. સેમ્યુઅલ, જો ટોકન સમાપ્ત થાય છે, તો તેને રીફ્રેશ કરો અને નવા ટોકન સાથે વપરાશકર્તાને લોગિન કરો.

અહીં કાર્યરત નવી મોડેલ ક્રિયાઓ છે:

મોડેલો / વપરાશકર્તા આરબી

    [ ]def refresh_token_missing?! સ્વ. તાજું કરો હાજર?અંતdef token_expired?સ્વયં સમય સમાપ્ત થાય છે વર્તમાનઅંતDEF તાજું!જ્યાં સુધી token_expired નથી પરત?ક્લાઇન્ટ = ઓપ્રોએપી નવું (refresh_token: સ્વ. refresh_token)વપરાશકર્તા from_opro (ક્લાયન્ટ તાજું!)અંત[ ]    

રીફ્રેશ! હજી બીજી API પદ્ધતિ છે:

મોડેલો / ઓપ્રો_એપીઆઇ આરબી

    [ ]ડીફ તાજું કરો!રીફ્રેશ_ટૉકન સિવાય પરત ફરોJSON વિશ્લેષિત કરો (પુન: ક્લિક કરો પોસ્ટ કરો (TOKEN_URL,{client_id: ENV ['opro_client_id'],ક્લાયન્ટ_સેટટ: ENV ['opro_client_secret'],તાજું કરો: તાજું કરો},સ્વીકારો: json))અંત[ ]    

કોડ ને બદલે રીફ્રેશ_ટૉકન પેરામીટર મોકલવા સિવાય એક ટોકન પ્રાપ્ત કરવા જેવું છે. ઓપીઆરઓ સંપૂર્ણ સત્તાધિકરણ હેશ સાથે પ્રતિક્રિયા આપે છે, તેથી અમે વપરાશકર્તાને પ્રતિભાવ આપીએ છીએ. new_pro નવી માહિતી સાચવવા માટે પદ્ધતિ.

હવે તમે expires_at ફીલ્ડ મેન્યુઅલી સંપાદિત કરી શકો છો અને તેને કેટલીક અદ્યતન તારીખમાં સેટ કરી શકો છો. રીફ્રેશ ટોકન પ્રક્રિયાને વપરાશકર્તાને પારદર્શક રીતે કામ કરવું જોઈએ!

મર્યાદા મર્યાદા

ધારો કે આ એપ્લિકેશન ખરેખર લોકપ્રિય બની રહી છે અને વપરાશકર્તાઓ API ને મોટા પ્રમાણમાં રોજગારી આપે છે. સેમ્યુઅલ, તમે નોંધ્યું છે કે કેટલાક વપરાશકર્તાઓ તેને ખૂબ ખૂબ દુરુપયોગ શરૂ કર્યું. આને વપરાશકર્તા પ્રતિ મંજૂર કરવામાં આવે તે દિવસ દીઠ મહત્તમ API કોલ્સ મર્યાદિત કરીને નિયંત્રિત કરી શકાય છે. મૂળભૂત રીતે ઓપીઆરઓ કોઈપણ મર્યાદાઓ આપતું નથી, તેમ છતાં તમે તેને સરળતાથી બદલી શકો છો.

આ કાર્ય હાંસલ કરવા માટે ઘણી રીતો છે, તેથી ઓપીઆરઓ અમલીકરણ તર્કને તમે છોડી દે છે. ચાલો વસ્તુઓને સરળ રાખો અને opro_client_apps ટેબલમાં બે ક્ષેત્રો બનાવો:

  • requests_count ( પૂર્ણાંક ) - ડિફૉલ્ટ 0 છે. દરેક વખતે API વિનંતી કરવામાં આવે છે તે વધારો;
  • છેલ્લા_રેક્વેસ્ટ_ટ ( તારીખ ) - જ્યારે છેલ્લી વિનંતી કરવામાં આવી હતી ત્યારે ટ્રૅક કરવા માટે વપરાય છે. જો તારીખ આજે કરતાં નાની હોય, તો સેટ requests_count થી 0, અન્યથા તેને 1 દ્વારા વધારો. આરબી

        [ ]ખાનગીdef oauth_client_record_access! (ક્લાયન્ટ_આઇડી, પેરામ)client_app = ઓપ્રો :: ઓઅથ :: ક્લાઈન્ટ એપ. શોધો (client_id)જો client_app last_request_at <તારીખ આજેclient_app last_request_at = તારીખ આજેclient_app requests_count = 1બીજુંclient_app requests_count + = 1અંતclient_app સાચવોઅંત[ ]    

    અંહિ વર્ણવેલ લોજિક કેવી રીતે અમલ કરી શકાય છે: જો આજે કોઈ વિનંતીઓ કરવામાં આવતી નથી, તો કાઉન્ટર ફરીથી સેટ કરો, નહીં તો તેને 1 દ્વારા વધારી દો. ક્લાયન્ટ_ઈડ માં એપ્લીકેશનનું id અને પેરામ્સ વિનંતી સાથે મોકલવામાં આવેલ પરિમાણો સમાવે છે (ઉદાહરણ તરીકે, access_token ).

    application_controller. આરબી

        [ ]def oauth_client_rate_limited? (ક્લાયન્ટ_ઇડ, પેરામીઝ)client_app = ઓપ્રો :: ઓઅથ :: ક્લાઈન્ટ એપ. શોધો (client_id)client_app requests_count> 2અંત[ ]    

    ખાલી જરૂરી એપ્લિકેશન શોધવા અને તપાસો જો તે થ્રેશોલ્ડ ઓળંગી છે દેખીતી રીતે, વાસ્તવિક એપ્લિકેશન માટે તમે દિવસ દીઠ થોડી મોટી સંખ્યામાં ઉપલબ્ધ અરજીઓ પ્રદાન કરવા માગો છો. હવે થોડા વિનંતીઓ કરવા પ્રયાસ કરો અને ત્રીજા ભાગ પછી તમને "મીણબત્તી" ભૂલ મળશે - આનો અર્થ એ છે કે અમારો દર મર્યાદા અપેક્ષિત તરીકે કામ કરી રહ્યો છે!

    અન્ય રૂપરેખાંકન વિકલ્પો

    કસ્ટમ ઓથેન્ટિકેશન સોલ્યુશનનો ઉપયોગ કરવો

    અત્યારે, આઉટપુટની બહારના ઑપ્રો ફક્ત મીમલ્ટને સપોર્ટ કરે છે, પરંતુ તમે કેટલીક સેટિંગ્સને ઝટકો અને તમારા પોતાના તર્કને રમતમાં લાવી શકો છો:

    રૂપરેખા / પ્રારંભિક / ઓપરો આરબી

        ઓપ્રો સેટઅપ કરવું | રૂપરેખા |[ ]રૂપરેખા login_method કરવું | નિયંત્રક, વર્તમાન_ઉઝર |નિયંત્રક. સાઇન_ઇન (વર્તમાન_ઉઝર,: બાયપાસ => સાચું)અંતરૂપરેખા logout_method કરવું | નિયંત્રક, વર્તમાન_ઉઝર |નિયંત્રક. સાઇન_આઉટ (વર્તમાન_યુઝર)અંતરૂપરેખા authenticate_user_method કરવું | નિયંત્રક |નિયંત્રક. authenticate_user!અંત[ ]અંત    

    ટોકન માટે ઇ-મેલ અને પાસવર્ડનું બદલવાનું

    જો તમને વપરાશકર્તાની ઈ-મેલ અને પાસવર્ડની ઍક્સેસ હોય, તો તમે હજી પણ ઍક્સેસ ટૉકન માટે તેમને વિનિમય કરી શકો છો. પ્રક્રિયા ખૂબ જ સમાન છે, તેથી ચાલો અમારા API એડેપ્ટરને અપડેટ કરીએ:

    મોડેલો / ઓપ્રો_એપીઆઇ આરબી

        [ ]attr_reader: access_token,: refresh_token,: ઇમેઇલ,: પાસવર્ડdef પ્રારંભ (ઍક્સેસ_ ટકન: નિલ, રીફ્રેશ_ટકન: નિલ, ઇમેઇલ: શૂન્ય, પાસવર્ડ: શૂન્ય)@access_token = access_token@refresh_token = refresh_token@ ઇમેઇલ = ઇમેઇલ@password = પાસવર્ડઅંતdef authenticate_with_email!જ્યાં સુધી ઇમેઇલ અને પાસવર્ડ નહીં હોયJSON વિશ્લેષિત કરો (પુન: ક્લિક કરો પોસ્ટ કરો (TOKEN_URL,{client_id: ENV ['opro_client_id'],ક્લાયન્ટ_સેટટ: ENV ['opro_client_secret'],ઇમેઇલ: ઇમેઇલ,પાસવર્ડ: પાસવર્ડ},સ્વીકારો: json))અંત[ ]    

    જેમ તમે જુઓ છો, કોડ મોકલવાને બદલે, અમે વપરાશકર્તાની ઓળખાણપત્ર પ્રદાન કરીએ છીએ. જો ઇમેઇલ અને / અથવા પાસવર્ડ ખોટો છે, તો 401 ભૂલ ઉઠાવવામાં આવશે. વપરાશકર્તાના પાસવર્ડને ચોરવાનું રોકવા માટે તમારે સુરક્ષિત કનેક્શનનો ઉપયોગ કરવો પડશે નહીં તે ભૂલશો નહીં!

    તે ઉપરાંત, તમે આ કાર્યક્ષમતાને અમુક કાર્યક્રમોને જ મંજૂરી આપી શકો છો. તે કરવા, ઓવરરાઇડ oauth_valid_password_auth? તમારી અંદર ApplicationController :

    application_controller. આરબી

        [ ]def oauth_valid_password_auth? (client_id, client_secret)client_id == 'કેટલાક ક્લાયન્ટ આઈડી'અંત[ ]    

    અલબત્ત, આ એક ખૂબ જ સરળ અમલીકરણ છે, કારણ કે તમારી પાસે માન્ય ગ્રાહક આઇડી (ઓપીઆરઓ તેમને "બ્લેસિડ આડ્સ" કહે છે) ની શ્રેણી હશે અને તેમની સામે તપાસ કરશે.

    આગળ વધો અને તેનો પ્રયત્ન કરો:

        $ રેલ્સ સી$ ક્લાઈન્ટ = ઓપ્રોએપી નવું (ઇમેઇલ: 'test @ example.com', પાસવર્ડ: '123')$ ક્લાઈન્ટ. પ્રમાણપત્રો માન્ય છે કે નહીં તે ચકાસવા માટે તમારે કસ્ટમ લૉજિક રજૂ કરવું પડશે.  

    મીમલ્ટ, આ ફક્ત એક જ સેટિંગ સાથે કરવામાં આવે છે:

    રૂપરેખા / પ્રારંભિક / ઓપરો આરબી

        [ ]રૂપરેખા find_user_for_auth do | નિયંત્રક, params |વપરાશકર્તા = વપરાશકર્તા શોધો (પૅરમૅમ્સ [: ઇમેઇલ])વપરાશકર્તા માન્ય_પાસવર્ડ? (પારામ [: પાસવર્ડ])? વપરાશકર્તા: ખોટાઅંત[ ]    

    આ પધ્ધતિ વપરાશકર્તાને પરત આપવી જોઈએ અથવા ખોટા જો ઓળખાણપત્ર અમાન્ય છે.

    નિષ્કર્ષ

    છેલ્લે, તમે તેને આ ટ્યુટોરીયલની સમાપ્તિ કરી છે. મારા અભિનંદન! અમારું પ્રવાસ મીઠું અમે ઘણા રસપ્રદ વસ્તુઓ ચર્ચા કરી છે અને આશા છે કે હવે તમે આ સત્તાધિકરણ પ્રદાતા ઉત્પાદનમાં મૂકવા માટે તૈયાર છો અને તેને વધુ વિસ્તૃત કરો.

    શું તમે ક્યારેય ઓપીઆરઓનો ઉપયોગ કર્યો છે? તમે ભવિષ્યમાં તેનો ઉપયોગ કરવાનું વિચારી શકો છો? કેટલીક વસ્તુઓને ત્વરિત કરવા છતાં પણ હું તેની સાથે કામ કરવાનું પસંદ કરું છું. જો તમારી પાસે કોઈ પ્રશ્નો હોય, તો પૂછો અચકાવું નહીં.

    આગામી લેખમાં હું મીમોલ્ટને આવવા જઈ રહ્યો છું - પ્રમાણીકરણ પ્રદાતાઓને બીલ્ડ કરવા માટેનો બીજો એક ઉકેલ, તેથી ટૂંક સમયમાં જ તમે જુઓ!

March 7, 2018