javascript - একটি লাইব্রেরি ব্যবহার না করে জাভাস্ক্রিপ্টে jwt টোকেন কীভাবে ডিকোড করবেন?




(8)

@ পেহেজে কাজ করবে তবে ইউনিকোড নিয়ে আপনার সমস্যা হবে। এটি ঠিক করতে আমি https://stackoverflow.com/a/30106551/5277071 এ কোডটি ব্যবহার করি;

let b64DecodeUnicode = str =>
  decodeURIComponent(
    Array.prototype.map.call(atob(str), c =>
      '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
    ).join(''))

let parseJwt = token =>
  JSON.parse(
    b64DecodeUnicode(
      token.split('.')[1].replace('-', '+').replace('_', '/')
    )
  )


let form = document.getElementById("form")
form.addEventListener("submit", (e) => {
   form.out.value = JSON.stringify(
      parseJwt(form.jwt.value)
   )
   e.preventDefault();
})
textarea{width:300px; height:60px; display:block}
<form id="form" action="parse">
  <textarea name="jwt">eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkrDtGhuIETDs8OoIiwiYWRtaW4iOnRydWV9.469tBeJmYLERjlKi9u6gylb-2NsjHLC_6kZNdtoOGsA</textarea>
  <textarea name="out"></textarea>
  <input type="submit" value="parse" />
</form>

আমি কীভাবে জাভাস্ক্রিপ্ট ব্যবহার করে জেডাব্লুটিটির পেডলোড ডিকোড করতে পারি? লাইব্রেরি ছাড়া। সুতরাং টোকেনটি কেবলমাত্র একটি পে-লোড অবজেক্ট ফিরিয়ে দেয় যা আমার ফ্রন্ট-এন্ড অ্যাপ্লিকেশনটি গ্রাস করতে পারে।

উদাহরণ টোকেন: xxxxxxxxx.XXXXXXXX.xxxxxxxx

এবং ফলাফল হ'ল পেডলোড:

{exp: 10012016 name: john doe, scope:['admin']}

jwt.io এর সমস্ত বৈশিষ্ট্য সমস্ত ভাষাকে সমর্থন করে না। নোডজেগুলিতে আপনি ব্যবহার করতে পারেন

var decoded = jwt.decode(token);

আমি jwt.io এ এই কোডটি jwt.io এবং এটি ভালভাবে কাজ করে।

//this is used to parse base64
function url_base64_decode(str) {
  var output = str.replace(/-/g, '+').replace(/_/g, '/');
  switch (output.length % 4) {
    case 0:
      break;
    case 2:
      output += '==';
      break;
    case 3:
      output += '=';
      break;
    default:
      throw 'Illegal base64url string!';
  }
  var result = window.atob(output); //polifyll https://github.com/davidchambers/Base64.js
  try{
    return decodeURIComponent(escape(result));
  } catch (err) {
    return result;
  }
}

কিছু ক্ষেত্রে (নির্দিষ্ট বিকাশ প্ল্যাটফর্ম),
সেরা উত্তর (এখন জন্য) অবৈধ বেস 64 দৈর্ঘ্যের একটি সমস্যার মুখোমুখি।
সুতরাং, আমার আরও স্থিতিশীল উপায় দরকার ছিল।

আমি আশা করি এটি আপনাকে সাহায্য করবে।


ইউনিকোড পাঠ্য JWT পার্সার ফাংশন কাজ করছে:

function parseJwt (token) {
    var base64Url = token.split('.')[1];
    var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
    var jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) {
        return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
    }).join(''));

    return JSON.parse(jsonPayload);
};

গাই এবং পেহেজে উভয়ই ইতিমধ্যে প্রশ্নের উত্তর দিয়েছিলেন। আমার মতো সামগ্রিক প্রাথমিকের জন্য উদাহরণটিতে আমদানি লাইনটি সংজ্ঞায়িত করাও সহায়ক।

এছাড়াও টোকেনটি শংসাপত্রগুলির পুরো সেট যা আবার পোস্ট হয় (পুরো জেডাব্লুটি টোকেন, এটির কেবল আইডিটোকেন অংশ নয়) তা বুঝতে আমার কয়েক মিনিট সময় লেগেছে। সোজা হয়ে একবার আপনি এটি জানতে পারবেন ..

import jwt_decode from 'jwt-decode';

var token = 'eyJ0eXAiO.../// jwt token';
var decoded = jwt_decode(token);

/*{exp: 10012016 name: john doe, scope:['admin']}*/


চেষ্টা - ধরা সঙ্গে সহজ ফাংশন

const parseJwt = (token) => {
  try {
    return JSON.parse(atob(token.split('.')[1]));
  } catch (e) {
    return null;
  }
};

ধন্যবাদ!


একটি JSON ওয়েব টোকেন (JWT) ডিকোডিংয়ের জন্য সহজ নোডজেএস সমাধান

function decodeTokenComponent(value) {
    const buff = new Buffer(value, 'base64')
    const text = buff.toString('ascii')
    return JSON.parse(text)
}

const token = 'xxxxxxxxx.XXXXXXXX.xxxxxxxx'
const [headerEncoded, payloadEncoded, signature] = token.split('.')
const [header, payload] = [headerEncoded, payloadEncoded].map(decodeTokenComponent)

console.log(`header: ${header}`)
console.log(`payload: ${payload}`)
console.log(`signature: ${signature}`)

share উত্তরটির উপর ভিত্তি করে আমি পেইড লোড, শিরোলেখ, এক্সপ্রেস (মেয়াদোত্তীকরণের সময়), আইএটি (ইস্যু করা হয়েছে) পেতে এই ফাংশনটি ব্যবহার করি

function parseJwt(token) {
  try {
    // Get Token Header
    const base64HeaderUrl = token.split('.')[0];
    const base64Header = base64HeaderUrl.replace('-', '+').replace('_', '/');
    const headerData = JSON.parse(window.atob(base64Header));

    // Get Token payload and date's
    const base64Url = token.split('.')[1];
    const base64 = base64Url.replace('-', '+').replace('_', '/');
    const dataJWT = JSON.parse(window.atob(base64));
    dataJWT.header = headerData;

// TODO: add expiration at check ...


    return dataJWT;
  } catch (err) {
    return false;
  }
}

const jwtDecoded = parseJwt('YOUR_TOKEN') ;
if(jwtDecoded)
{
    console.log(jwtDecoded)
}





jwt