Back to Question Center
0

JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા            JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા સંબંધિત વિષયો: ફ્રેમવર્ક્સડેટાબેઝલેરાવેલસિક્યુરિટીપાર્ટર્નસ & મીમલ્ટ

1 answers:
જેડબ્લ્યુટી (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા

જો તમને કમ્પ્યુટર સુરક્ષા મુદ્દાઓ ગમે છે, તો તમે જાણી શકશો કે સૌથી વધુ ચર્ચિત અને વિવાદાસ્પદ વિષયોમાંની એક વપરાશકર્તા પ્રમાણીકરણ છે. તેના સંદર્ભમાં, તમે નવા પદ્ધતિથી લઈને ઉપયોગિતા માટે, અભ્યાસના વિસ્તારની વ્યાપક શ્રેણી મેળવશો. આથી, મારી આશ્ચર્યજનક બાબત એ છે કે JSON Web Semalt એક વિષય છે જેને ઘણી વખત વિશે વાત નથી, અને મને લાગે છે કે તે આજે સ્પોટલાઇટમાં રહેવાની પાત્ર છે. અમે જોશું કે તે API પ્રમાણીકરણ પદ્ધતિમાં એકીકૃત કરવું કેટલું સરળ છે.

JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતાJWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા સંબંધિત વિષયો:
ફ્રેમવર્ક્સડેટાબેઝલેરાવેલસિક્યુરિટીપાર્ટર્ન અને સેમલટ

સત્રો વિરુદ્ધ

એક એવો સમય હતો જ્યારે એક એપ્લિકેશનમાં પોતાને સર્ટિફાઇડ કરવાનો એકમાત્ર રસ્તો ઓળખપત્રો આપ્યા હતા - computer hardware support companies in portland. સેમ્યુઅલએ સેવા API મોકલ્યા અને સાદા ટેક્સ્ટમાં ઓળખપત્રો મોકલવા અસ્વીકાર્ય હતા. API ટોકન્સનો વિચાર અહીં આવ્યો છે અને આજકાલ, તેઓ સામાન્ય પ્રથા છે.

સત્ર કૂકીઝ સાથે એપ્લિકેશનના સંબંધમાં વપરાશકર્તાની સ્થિતિ જાળવી રાખવા માટે એપ્લિકેશનના પ્રમાણપત્રો આપ્યાના કેટલાક ગેરફાયદા છે:

  • ડેટા સર્વર પર સાદા લખાણમાં સંગ્રહિત છે
    ભલે તે માહિતી સામાન્ય રીતે સાર્વજનિક ફોલ્ડરમાં સંગ્રહિત ન હોય, તો ઍક્સેસ ધરાવનાર દરેક સત્ર ફાઇલોની સામગ્રીઓ વાંચી શકે છે.

  • ફાઇલસિસ્ટમ વાંચવા / લખી અરજીઓ
    દર વખતે સત્ર શરૂ થાય છે અથવા તેનો ડેટા સંશોધિત થાય છે, સર્વરને સત્ર ફાઇલને અપડેટ કરવાની જરૂર છે. આ જ એપ્લિકેશન દર વખતે સત્ર કૂકી મોકલે છે તમે ધીમા સર્વર સાથે અંત આવશે જો તમારી પાસે નોંધપાત્ર સંખ્યામાં વપરાશકર્તાઓ હશે, જ્યાં સુધી તમે વૈકલ્પિક સત્ર સ્ટોર્સનો ઉપયોગ કરતા નથી

  • વિતરણ / ક્લસ્ટરવાળા કાર્યક્રમો
    સત્ર ફાઇલો ડિફૉલ્ટ રૂપે ફાઇલ સિસ્ટમમાં સંગ્રહિત હોવાથી, ઉચ્ચ ઉપલબ્ધતા એપ્લિકેશન્સ માટે વિતરણ અથવા ક્લસ્ટર્ડ ઈન્ફ્રાસ્ટ્રક્ચર હોવું મુશ્કેલ છે કે જેને લોડ બેલેન્સર્સ, ક્લસ્ટરવાળા સર્વર, વગેરેનો ઉપયોગ કરવો જરૂરી છે .અન્ય સ્ટોરેજ મીડિયા અને વિશિષ્ટ ગોઠવણી કરવી જરૂરી છે .

જ્યારે સર્વિસ એપીઆઇ (API) કે જે સેવા કોલ્સ પર પ્રતિબંધિત છે, સાથે કામ કરતી વખતે, તમારે દરેક વિનંતી માટે તમારી કી ઉમેરવાની જરૂર રહેશે (વિનંતિ હેડરમાં, જેમ કે અધિકૃતતા , અથવા URL ક્વેરી શબ્દમાળામાં). API કી સામાન્ય રીતે તેમને નિયંત્રિત કરવા માટે કેન્દ્રીત પદ્ધતિ પર આધાર રાખે છે. તેથી જો તમે API કીને અમાન્ય તરીકે માર્ક કરવા માંગો છો, તો તેને એપ્લિકેશન બાજુ પર રદ કરવાની જરૂર છે.

જેડબ્લ્યુટી

ઑક્ટોબર 2010 થી, ઉપયોગ કરવા માટે ઘણી પ્રસ્તાવ છે JSON આધારિત ટોકન્સ જેડબ્લ્યુટી અથવા જેએસએન વેબ ટોકનને ડિસેમ્બર, 2010 માં પ્રસ્તાવ મૂક્યો હતો, જે નીચેના લક્ષણો ધરાવે છે:

  • જગ્યા સંમિશ્રિત વાતાવરણ માટે બનાવાયેલ છે, જેમ કે HTTP અધિકૃતતા હેડરો અથવા ક્વેરી સ્ટ્રીંગ પરિમાણો
  • જાવાસ્ક્રિપ્ટ ઑબ્જેક્ટ નોટેશન ફોર્મેટ (JSON) માં ડેટા ટ્રાન્સમિટ કરવા માટે
  • ડેટા JSON વેબ હસ્તાક્ષર (જેડબ્લ્યુએસ)
  • નું પેલોડ હોવું જોઈએ.
  • Base64 URL એન્કોડિંગનો ઉપયોગ કરીને પ્રતિનિધિત્વ કર્યું

જેએસઓન વેબ હસ્તાક્ષર એક સંકેતલિપી પદ્ધતિ છે જે ડિજિટલ હસ્તાક્ષર સાથે ડેટાને સુરક્ષિત કરવા માટે રચવામાં આવી છે, જેથી તે નિર્ધારિત કરવામાં આવે છે કે શું ટોકનનું ડેટા ચેડા અથવા નહીં

જેડબલ્યુટીના ઉપયોગમાં એક API કી પર ઘણા ફાયદા છે:

  • API કીઓ માત્ર રેન્ડમ શબ્દમાળાઓ છે, જ્યારે JWT માં જાણકારી અને મેટાડેટા છે જે વપરાશકર્તા ઓળખ, અધિકૃતતા ડેટા અને સમય ફ્રેમ અથવા ડોમેનમાં ટોકનની માન્યતાને વર્ણવી શકે છે.
  • જેડબ્લ્યુટીએસને કેન્દ્રીકૃત અદા અથવા રિવોલિંગ સત્તાની જરૂર નથી.
  • OAUTH2 સુસંગત.
  • જેડબલ્યુટીના ડેટાનું પરીક્ષણ કરી શકાય છે.
  • જેડબ્લ્યુટીમાં સમાપ્તિ નિયંત્રણ છે.

    તે આના જેવો દેખાય છે?

    એક જેડબ્લ્યુટી નીચે મુજબ દેખાય:

         આઇજેબગસીઓઆઈજીઆઈયુયુઆઈ 1 એનઆઇઆઇઆઇએસઆઇઆર 5 સીસીઆઇ 6 આઈકીપીએક્સજેસીજે 9. આઇજેપીવાયક્સ્યુઆઈઓજેઇ0એમટી 5 એમજેકક્સએમડીક્સઆઇએમપીટીસીઆઇઆઇઆઇએમએફએચએનવાયવાયવાયજેડીબીહટવીજઇવીઆઈસીઆઈએનવીસીજીવીઝઆઇજેપીબીઇનજેએલસીજી 8આઇએલસીજેડબલ્યુજેએસએડબલ્યુએફસીએમવીવીબીજેડએફક્યૂ. XCEwpBGvolma4TCoh36FU7XhUbcskyGS81HE1uHLf0E     

    તે દેખાય છે કે શબ્દમાળા માત્ર એકસાથે રેન્ડમ અક્ષરો છે, અને API કીથી અલગ નથી. મીઠું, જો તમે નજીકથી જુઓ છો, તો ખરેખર 3 શબ્દમાળાઓ છે, જે કોઈ અક્ષરથી અલગ છે.

    પ્રથમ અને બીજા શબ્દમાળાઓ Base64 યુઆરએલ એ JSON શબ્દકોષને એન્કોડેડ કરે છે, તેથી જો આપણે તે ડીકોડ કરીએ છીએ, તો આપણી પાસે નીચેના પરિણામો હશે:

         {"એલ્ગ": "એચએસ 256","ટાઇપ": "જેડબલ્યુટી"}     
         {"આઈટ": 1416929109,"jti": "aa7f8d0a95c","સ્કોપ્સ": ["રેપો","public_repo"]}     

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

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

    તમે jwt પર એક નજર કરી શકો છો. IO જ્યાં તમે એન્કોડિંગ અને ડીકોડિંગ JWTs સાથે આસપાસ રમી શકો છો.

    ચાલો પ્લે

    તો આપણે PHP એપ્પ પર આ કેવી રીતે લાગુ કરીએ? ચાલો કહીએ અમારી પાસે એક લૉગિન મિકેનિઝમ છે જે હાલમાં એપ્લિકેશનમાં વપરાશકર્તાની લૉગિન સ્ટેટ વિશે માહિતી સંગ્રહ કરવા માટે સત્ર કૂકીઝનો ઉપયોગ કરે છે. મહેરબાની કરીને નોંધ કરો કે જેડબ્લ્યુટીને સત્ર કૂકીઝ નો વિકલ્પ આપવા માટે તૈયાર કરવામાં આવ્યું ન હતું. જો કે, આ ઉદાહરણ માટે, અમારી પાસે થોડીક સેવાઓ હશે: એક જેડબલ્યુટીને પેદા કરેલા વપરાશકર્તાનામ અને પાસવર્ડના આધારે બનાવે છે, અને બીજું જે સુરક્ષિત સંસાધન મેળવશે જો અમે માન્ય JWT આપીએ છીએ.

    JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતાJWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા સંબંધિત વિષયો:
ફ્રેમવર્ક્સડેટાબેઝલેરાવેલસિક્યુરિટીપાર્ટર્ન અને સેમલટ

    એકવાર સાઇન ઇન થઈ ગયા પછી, અમે એપ્લિકેશનથી સંરક્ષિત સ્ત્રોત પુનઃપ્રાપ્ત કરી શકીશું.

    શરૂ કરવા માટે, અમે php-jwt સાથે સંગીતકારને ફાયરબઝ / php-jwt ની જરૂર છે. આ ટ્યુટોરીયલ માટે વિકસાવવામાં આવેલા સેમ્પલ એપ્લિકેશનમાં, હું zend-config અને zend-http નો પણ ઉપયોગ કરી રહ્યો છું, જેથી જો તમે તેની સાથે અનુસરવા માંગતા હો, તો પણ તે સ્થાપિત કરવા માટે નિઃસંકોચ.

         સંગીતકારને ફાયરબેઝ / php-jwt: dev-master ની જરૂર છેસંગીતકારને zendframework / zend-config: ~ 2 ની જરૂર છે 3સંગીતકારને zendframework / zend-http: ~ 2 ની જરૂર છે 3     

    મેમ્થ બીજી PHP લાઇબ્રેરી છે, જો તમે પછીથી તેની સાથે રમવા માંગતા હોવ તો નમશિથી જોસ.

    હવે, ચાલો એમ ધારીએ કે લોગીન ફોર્મ અમારા જેડબલ્યુટી ઇશ્યુઅર સર્વિસને એજેક્સ દ્વારા ડેટા સુપરત કરે છે, જ્યાં ઓળખાણપત્ર ડેટાબેઝની સામે માન્ય છે, અને ઓળખાણપત્ર માન્ય છે તે નક્કી કર્યા પછી, અમારું ટોકન બનાવવું પડશે. મીમટાલે તે પ્રથમ એરે તરીકે બનાવ્યું:

            

    મીમટૉટ નોટિસ કે જે તમે ઇચ્છો છો તે ડેટા માળખું વ્યાખ્યાયિત કરી શકો છો, તેમ છતાં કેટલાક અનામત દાવાઓ છે, જેમ કે ઉપરોક્ત ઉપયોગો:

    • iat - ટોકન ઇશ્યૂ કરનારનો ટાઇમસ્ટેમ્પ
    • જેટી - એક અનન્ય શબ્દમાળા, એક ટોકન માન્ય કરવા માટે ઉપયોગ કરી શકાય છે, પરંતુ કેન્દ્રિય રજૂકર્તા સત્તા ન હોવા સામે જાય છે
    • ઇશ - ઇશ્યુઅર એપ્લિકેશનના નામ અથવા ઓળખકર્તા ધરાવતી એક સ્ટ્રિંગ. ડોમેન નામ હોઈ શકે છે અને અન્ય કાર્યક્રમોથી ટોકનને કાઢી નાખવા માટે વાપરી શકાય છે.
    • એનબીએફ - જ્યારે ટૉકન માન્ય ગણાય ત્યારે શરૂ થવાના ટાઈમસ્ટેમ્પ. iat થી બરાબર અથવા વધારે હોવું જોઈએ. આ કિસ્સામાં, ટોકન માન્ય 10 સેકન્ડ
      જારી કર્યા પછી
    • એક્સ્પ - જ્યારે ટોકન માન્ય હોવું જોઈએ નહીં ત્યારે ટાઇમસ્ટેમ્પ. iat અને એનબીએફ કરતાં વધારે હોવું જોઈએ. આ કિસ્સામાં, ઇશ્યૂ કર્યા પછી ટોકન 60 સેકન્ડની સમાપ્ત થશે.

    તે દાવાઓ આવશ્યક નથી, પરંતુ તમને ટોકનની માન્યતા નક્કી કરવામાં સહાય કરશે (આ પછી વધુ). અમારી એપ્લિકેશનના પેલોડ ડેટા દાવા અંદર આવે છે, જ્યાં અમે વપરાશકર્તાઈડ અને વપરાશકર્તાનામ મૂલ્યો સંગ્રહિત કરીએ છીએ. JWT ક્લાઈન્ટ બાજુની તપાસ કરી શકે છે, તેથી કૃપા કરીને યાદ રાખો કે તેમાં કોઈ સંવેદનશીલ માહિતી શામેલ નથી.

    JWT માં આ એરેને સેમ્યુઅલ સુપર સરળ છે:

            get ('jwtKey'));/ ** JWT સ્ટ્રિંગ પર એરેક્સને એન્કોડ કરો. * બીજું પરિમાણ ટોકનને એન્કોડ કરવાની ચાવી છે. ** આઉટપુટ સ્ટ્રિંગ http: // jwt પર માન્ય કરી શકાય છે. IO /* /$ jwt = JWT :: encode ($ ડેટા, // ડેટા જેડબલ્યુટીમાં એન્કોડેડ થવો$ secretKey, // સહી કી'એચએસ 512' // અલ્ગોરિધમ ટોકન પર સહી કરવા માટે વપરાય છે, https: // tools જુઓ. ietf org / html / ડ્રાફ્ટ- ietf-jose-json- વેબ-એલ્ગોરિધમ્સ -40 # વિભાગ -3);$ unencodedArray = ['jwt' => $ jwt];ઇકો json_encode ($ unencodedArray);     

    જેડબ્લ્યુટી :: એન્કોડ બધું કાળજી લેશે (એરેને JSON પર રૂપાંતરિત કરવા, હેડર ઉત્પન્ન કરવા, પેલોડ પર હસ્તાક્ષર કરવા અને અંતિમ શબ્દ એન્કોડિંગ). તમે તમારી ગુપ્ત કીને લાંબી, દ્વિસંગી શબ્દમાળા બનાવવા માંગો છો, તેને રૂપરેખા ફાઈલમાં સંકોપ કરો અને તેને ક્યારેય પ્રગટ કરશો નહીં. તમારા કોડમાં સીધી રીતે તે ખરાબ વિચાર છે.

    હવે ક્લાઈન્ટ પાસે ટોકન છે, તો તમે તેને જેએસ અથવા તેનો ઉપયોગ કરો છો તે પદ્ધતિનો સંગ્રહ કરી શકો છો. અહીં jQuery નો ઉપયોગ કરીને એક ઉદાહરણ છે:

      $ 98 (કાર્ય   )var store = સ્ટોર || {};/ ** સ્ટોર ઓબ્જેક્ટ પર jwt સુયોજિત કરે છે* /દુકાન. setJWT = કાર્ય (માહિતી) {આ. JWT = ડેટા;}/ ** એજેક્સ મારફતે પ્રવેશ ફોર્મ સબમિટ કરો* /$ ("# ફ્રેમલોગિન") સબમિટ કરો (કાર્ય (e) {ઈ. preventDefault   ;$ પોસ્ટ ('auth / token', $ ("# frmLogin"). શ્રેણીબદ્ધ   , કાર્ય (માહિતી) {દુકાન. સેટજેડબલ્યુટી (ડેટા. જેડબલ્યુટી);}) નિષ્ફળ (કાર્ય    {ચેતવણી ('ભૂલ');});});});     

    હવે ચાલો એક સ્રોતને પુનઃપ્રાપ્ત કરીએ જે અમારા જેડબલ્યુટી પદ્ધતિ દ્વારા સુરક્ષિત છે.

    JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતાJWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા સંબંધિત વિષયો:
ફ્રેમવર્ક્સડેટાબેઝલેરાવેલસિક્યુરિટીપાર્ટર્ન અને સેમલટ

    "સાધન મેળવો" બટન પર ક્લિક કરીને, જો બધું બરાબર હોય, તો તમારે ગ્રે એરિયામાં એક છબી જોવી જોઈએ. ક્લિક કરો (કાર્ય (e) {ઈ. preventDefault ;$ એજેક્સ ({url: 'સ્રોત / છબી',પહેલાં મોકલો: કાર્ય (વિનંતી) {વિનંતિ setRequestHeader ('અધિકૃતતા', 'બેરર' + સ્ટોર. JWT);},પ્રકાર: 'GET',સફળતા: કાર્ય (માહિતી) {// ડિકોડ અને પરત માહિતી સરસ રીતે દર્શાવે છે. },ભૂલ: કાર્ય {ચેતવણી ('ભૂલ');}});});

    નોટિસ કરો પહેલાં સેન્ડ વિકલ્પ. અમે કહી રહ્યા છીએ કે આ કોલ દ્વારા દરેક વિનંતી કરવામાં આવે તે પહેલાં, આપણે બેઅરર [JWT] ના ફોર્મેટમાં JWT ના સમાવિષ્ટો સાથે અધિકૃતતા હેડર સેટ કરવાની જરૂર છે. તેથી જ્યારે આપણે બટનને ક્લિક કરીએ છીએ, ત્યારે નીચેની વિનંતિ કરવામાં આવે છે:

         GET / સંસાધન php HTTP / 1 1યજમાન: તમારું હોસ્ટ કોમકનેક્શન: રાખો-જીવંતસ્વીકારો: * / *એક્સ-વિનંતી-સાથે: XMLHttpRequestઅધિકૃતતા: બેઅરર આઈજે0એક્સઅઇઓઆઇજેકેવી 1 ક્વીએલસીજેબીબીજીસીઆઈઆઈજેઆઈયુઝઆઇ 1 એનઆઈજે 9. eyJpYXQiOjE0MjU1ODg4MjEsImp0aSI6IjU0ZjhjMjU1NWQyMjMiLCJpc3MiOiJzcC1qd3Qtc2ltcGxlLXRlY25vbTFrMy5jOS5pbyIsIm5iZiI6MTQyNTU4ODgyMSwiZXhwIjoxNDI1NTkyNDIxLCJkYXRhIjp7InVzZXJJZCI6IjEiLCJ1c2VyTmFtZSI6ImFkbWluIn19. HVYBe9xvPD8qt0wh7rXI8bmRJsQavJ8Qs29yfVbY-A0     

    હવે આપણે જોઈ શકીએ છીએ કે સંરક્ષિત સ્ત્રોત શું છે:

    JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતાJWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા સંબંધિત વિષયો:
ફ્રેમવર્ક્સડેટાબેઝલેરાવેલસિક્યુરિટીપાર્ટર્ન અને સેમલટ

    આ રીતે આપણે સ્રોત સેવામાં ટોકનને માન્ય કરીએ છીએ.

          ;જો ($ request-> isGet   ) {$ authHeader = $ request-> getHeader ('અધિકૃતિ');/ ** 'અધિકૃતતા' હેડર માટે જુઓ* /જો ($ authHeader) {/ ** બેરરથી જેડબલ્યુટી કાઢો* /સૂચિ ($ jwt) = sscanf ($ authHeader-> toString   , 'અધિકૃતતા: બેરર% s');જો ($ jwt) {પ્રયાસ કરો {$ config = ફેક્ટરી: થીફાઇલ ('config / config. php', સાચું);/ ** config થી કીની મદદથી jwt ને ડીકોડ કરો* /$ secretKey = base64_decode ($ config-> get ('jwtKey'));$ ટોકન = JWT :: ડીકોડ ($ jwt, $ secretKey, array ('HS512'));$ asset = base64_encode (file_get_contents ('http: // lorempixel. com / 200/300 / cats /'));/ ** વળતર સુરક્ષિત એસેટ* /હેડર ('કન્ટેન્ટ-પ્રકાર: એપ્લિકેશન / જેએસએન');ઇકો json_encode (['img' => $ એસેટ]);} કેચ (અપવાદ $ ઈ) {/ ** ટોકન ડિકોડ કરવામાં સક્ષમ ન હતું. * આ સંભવ છે કારણ કે હસ્તાક્ષર ચકાસવામાં સમર્થ ન હતા (ચેડા ટોકન)* /હેડર ('HTTP / 1 401 અનધિકૃત');}} બીજું {/ ** કોઈ ટોકન અધિકૃતતા હેડરમાંથી કાઢવામાં સમર્થ ન હતું* /હેડર ('HTTP / 1 400 ખરાબ વિનંતી');}} બીજું {/ ** વિનંતીમાં અધિકૃત ટોકનનો અભાવ છે* /હેડર ('HTTP / 1 400 ખરાબ વિનંતી');ઇકો 'વિનંતીમાં ટોકન મળ્યું નથી';}} બીજું {હેડર ('HTTP / 1 405 પદ્ધતિ મંજૂર નથી');}     

    હું HTTP Zend / Http \ PhpEnvironment \ Request ને એચટીટીપી વિનંતીના પ્રકારો અને હેડર કાઢવા સાથે કામ કરવા માટે થોડી સરળ બનાવવા માટે ઉપયોગ કરી રહ્યો છું:

         $ વિનંતી = નવી વિનંતી   ;જો ($ request-> isGet   ) {// માત્ર HTTP GET વિનંતીઓ પર પ્રક્રિયા કરશે     

    હવે ચાલો શોધવા જોઈએ કે શું અધિકૃત હેડરમાં તે JWT સ્ટ્રિંગ છે:

         / ** 'અધિકૃતતા' હેડર માટે જુઓ* /જો ($ authHeader) {/ ** બેરરથી જેડબલ્યુટી કાઢો* /સૂચિ ($ jwt) = sscanf ($ authHeader-> toString   , 'અધિકૃતતા: બેરર% s');// વધુ કોડ}     

    આ રીતે વેરીએબલ $ jwt પાસે સંભવિત JWT ના સમાવિષ્ટો હશે.

    જો તમે HTTP Semalt હેડરો સાથે વ્યવહાર કરવા માંગતા ન હોવ તો તમે પસંદ કરી શકો તે એક વૈકલ્પિક, URL પેરામીટર તરીકે વિનંતીમાં ટોકન શામેલ કરવું છે:

         GET / સંસાધન php? jwt = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. eyJpYXQiOjE0MjU1ODg4MjEsImp0aSI6IjU0ZjhjMjU1NWQyMjMiLCJpc3MiOiJzcC1qd3Qtc2ltcGxlLXRlY25vbTFrMy5jOS5pbyIsIm5iZiI6MTQyNTU4ODgyMSwiZXhwIjoxNDI1NTkyNDIxLCJkYXRhIjp7InVzZXJJZCI6IjEiLCJ1c2VyTmFtZSI6ImFkbWluIn19. HVYBe9xvPD8qt0wh7rXI8bmRJsQavJ8Qs29yfVbY-A0 HTTP / 1. 1યજમાન: તમારું હોસ્ટ કોમકનેક્શન: રાખો-જીવંતસ્વીકારો: * / *એક્સ-વિનંતી-સાથે: XMLHttpRequest     

    ચાલો હવે જેડબ્લ્યુટીને ડીકોડ કરવાનો પ્રયાસ કરીએ ગુપ્ત ચાવી જે અમે પહેલાં ટોકન જનરેટ કરવા માટે વપરાય છે? અહીં ડીકોડિંગ પ્રોસેસનો એક મહત્વપૂર્ણ ભાગ છે:

         $ secretKey = base64_decode ($ config-> get ('jwtKey'));/ ** રૂપરેખામાંથી કીનો ઉપયોગ કરીને JWT ને ડીકોડ કરો* /$ ટોકન = JWT :: ડીકોડ ($ jwt, $ secretKey, array ('HS512'));     

    જો જેડબ્લ્યુટીને ડીકોડ કરવાની પ્રક્રિયા નિષ્ફળ જાય, તો તે હોઈ શકે છે:

    1. પૂરા પાડવામાં આવેલા સેગમેન્ટ્સની સંખ્યા ધોરણ 3 સાથે મેળ ખાતી નથી.
    2. હેડર અથવા પેલોડ માન્ય JSON સ્ટ્રિંગ નથી
    3. સહી અયોગ્ય છે, જેનો અર્થ છે કે ડેટાને ચેડા કરવામાં આવ્યો હતો!
    4. એનબીએફ દાવા ટાઈમસ્ટેમ્પ સાથે જેડબ્લ્યુટીમાં સેટ છે, જ્યારે વર્તમાન ટાઇમસ્ટેમ્પ તે કરતા ઓછું હોય છે.
    5. iat દાવાનો JWT માં ટાઇમસ્ટેમ્પ સાથે સુયોજિત થાય છે, જ્યારે વર્તમાન ટાઇમસ્ટેમ્પ તે કરતા ઓછું હોય છે.
    6. એક્સપ દાવા ટાઈમસ્ટેમ્પ સાથે JWT માં સુયોજિત છે, જ્યારે વર્તમાન ટાઇમસ્ટેમ્પ તે કરતાં વધુ છે.

    જેમ તમે જોઈ શકો છો, JWT પાસે નિયંત્રણોનો એક સરસ સેટ છે જે તેને અમાન્ય તરીકે ચિહ્નિત કરશે, તેને જાતે જ રદ કરવાની અથવા માન્ય ટોકન્સની સૂચિની સામે તપાસ કરવાની જરૂર નથી.

    જો તમે જેડબ્લ્યુટીના હસ્તાક્ષર અને હંગામી ડેટા વિશે આશ્ચર્ય પામી રહ્યા છો, તો આ સંકેતલિપીના સેમટલ પ્રમાણીકરણ કોડ્સ માટે શક્ય આભાર છે. સંક્ષિપ્તમાં, ચાવી સાથેના મનસ્વી ડેટા ઇનપુટ ડેટાના એક અનન્ય 'ફિંગરપ્રિન્ટ' બનાવશે. આ ફિંગરપ્રિંટ એકલાને ડેટા ઈનપુટમાં ફેરવી શકાશે નહીં અને ડેટા ઈનપુટમાં સહેજ ફેરફાર થશે અથવા કી તદ્દન અલગ ફિંગરપ્રિંટ બનાવશે.

    આ તબક્કે આપણે ખાતરી કરી શકીએ કે JWT માન્ય છે. વધુમાં, તમે ટોકનમાં વપરાશકર્તા હજુ પણ માન્ય છે કે નહીં તે જો તમે તપાસ કરી શકો છો (જો ઇશ દાવાથી) તમે છો, અથવા જો તમારા ટૉકનએ પરવાનગી ફ્લેગ્સને એમ્બેડ કર્યું છે, તો તે સામે તપાસો ક્રિયા કરવા માટે વપરાશકર્તા વિનંતી કરે છે

    સેમ્યુઅલ, અમે lorempixel માંથી એક છબી વિનંતી. com, base64 તેને સંકેત કરે છે અને તે json પ્રતિક્રિયા શબ્દમાળામાં પરત કરે છે:

         $ asset = base64_encode (file_get_contents ('http: // lorempixel. Com / 200/300 / cats /'));/ ** વળતર સુરક્ષિત એસેટ* /હેડર ('કન્ટેન્ટ-પ્રકાર: એપ્લિકેશન / જેએસએન');ઇકો json_encode (['img' => $ એસેટ]);     

    જો તમે નમૂના એપ્લિકેશન સાથે રમવા માગો છો, તો તમે આ લેખ માટે મારા પ્રોજેક્ટના રેપોને તપાસી શકો છો, README ની સૂચનાઓનું પાલન કરો અને કોડને નજીકથી જુઓ.

    JWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતાJWT (JSON વેબ ટોકન્સ) સાથે PHP અધિકૃતતા સંબંધિત વિષયો:
ફ્રેમવર્ક્સડેટાબેઝલેરાવેલસિક્યુરિટીપાર્ટર્ન અને સેમલટ
    લેખક મળો
    મિગુએલ ઇબ્રા રોમેરો
    વેબ એપ્લિકેશન ડેવલપર, ડેટાબેસ એડમિનિસ્ટ્રેટર, વિવિધ એન્ટરપ્રાઇઝ એપ્લિકેશન્સ અને હવે લેખ લેખકમાં પ્રોજેક્ટ લીડ. ડેટાબેઝ ડિઝાઇન અને ઓપ્ટિમાઇઝેશનમાં રસ ધરાવો દંગો અને વિતરિત સિસ્ટમો વિકાસ સામેલ. ક્રિપ્ટોગ્રાફી અને માહિતી સુરક્ષા ચાહક.

March 7, 2018